0Pricing
Linux Server Deployment & SSH Mastery · 课时

保护数据库连接

使用 SSL/TLS 配置安全的数据库连接,并根据 IP 地址限制访问,以增强安全性。

保护数据库连接 是 CoddyKit 上的免费 Linux Server Deployment & SSH Mastery 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Linux Server Deployment & SSH Mastery 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Linux Server Deployment & SSH Mastery 课程共包含 4 节课。

为什么要保护数据库连接

当应用程序连接到数据库时,敏感数据通常会通过网络传输。如果缺乏适当的安全措施,这些数据可能会被拦截或篡改。

  • 机密性:防止未经授权的人员查看数据。
  • 完整性:确保数据在传输过程中未被更改。
  • 身份验证:验证客户端和服务器双方的身份。

本课重点介绍两种关键方法:SSL/TLS 加密和基于 IP 的访问限制。

了解数据库的 SSL/TLS

SSL/TLS(安全套接字层/传输层安全)是用于在 Web 服务器与客户端之间建立加密连接的标准技术(在本例中则是在数据库服务器与客户端之间建立连接)。

  • 它会加密交换的所有数据,防止数据被窃听。
  • 它使用数字证书验证服务器的身份(也可以选择验证客户端的身份)。
  • 在传输密码、财务信息和个人信息等数据时,它对于保护数据至关重要。

生成 SSL/TLS 证书

要使用 SSL/TLS,数据库服务器需要数字证书和私钥。这些凭据用于证明服务器的身份。

  • 自签名证书:最容易创建,适合测试或内部网络,但默认情况下不受信任。
  • CA 签名证书:由证书颁发机构(CA)签发并受到全球信任,非常适合生产环境。

在本课中,我们假设您已经准备好了服务器证书(server.crt)和私钥(server.key)。

PostgreSQL:启用 SSL

要在 PostgreSQL 中启用 SSL,您需要编辑 postgresql.conf 文件。该文件用于告知服务器监听安全连接的位置,以及证书的存放位置。

关键参数:

  • ssl = on:启用 SSL。
  • ssl_cert_file:服务器证书的路径。
  • ssl_key_file:服务器私钥的路径。

完成更改后,请重启 PostgreSQL。

# Snippet from postgresql.conf

ssl = on
ssl_cert_file = '/etc/ssl/certs/postgresql/server.crt'
ssl_key_file = '/etc/ssl/private/postgresql/server.key'
ssl_crl_file = '' # Optional: Certificate Revocation List

# Remember to restart PostgreSQL after changes!

MySQL:启用 SSL/TLS

对于 MySQL,您需要在 my.cnf 文件中配置 SSL/TLS(在 Windows 上通常是 my.ini),配置位置通常位于 [mysqld] 部分。

您需要指定服务器证书、私钥的路径;如果使用证书颁发机构(CA)证书验证客户端证书,还可以指定 CA 证书的路径。

修改配置后,请重启 MySQL 服务,使更改生效。

# Snippet from my.cnf

[mysqld]
ssl_ca = /etc/mysql/certs/ca.pem
ssl_cert = /etc/mysql/certs/server-cert.pem
ssl_key = /etc/mysql/certs/server-key.pem

# Restart MySQL after changes!

使用 SSL/TLS 建立客户端连接

服务器配置完成后,需要告知客户端在连接时使用 SSL/TLS。这通常需要在连接字符串或命令中指定 SSL 选项。

下面以 PostgreSQL 的 psql 客户端为例,明确要求使用 SSL 模式:

  • sslmode=require:强制使用 SSL 连接。
  • sslrootcert:用于验证服务器的 CA 证书路径。
psql "host=your_db_host user=your_user dbname=your_db \
  sslmode=require sslrootcert=/path/to/ca.crt"

按 IP 地址限制访问

除了加密之外,根据客户端的 IP 地址限制访问也是一项基本的安全措施。这样可以确保只有受信任的计算机才能尝试连接您的数据库。

您可以通过以下方式进行配置:

  • 在数据库服务器层面配置(例如 PostgreSQL 的 pg_hba.conf 或 MySQL 的 GRANT 语句)。
  • 使用防火墙(例如 UFW 或 firewalld)阻止未经授权的 IP 访问数据库端口。

结合使用这两种方式可以提供分层防御。

PostgreSQL:使用 pg_hba.conf 限制 IP

PostgreSQL 使用 pg_hba.conf 文件进行基于主机的身份验证。每一行都会指定连接类型、数据库、用户和允许的 IP 地址。

常见字段:

  • TYPE: host(TCP/IP)、local(Unix 套接字)。
  • DATABASE: all、特定数据库名称。
  • USER: all、特定用户。
  • ADDRESS:IP 范围(例如 192.168.1.0/24)或单个 IP。
  • METHOD: scram-sha-256、md5、peer 等。

编辑后请记得重启 PostgreSQL。

# Snippet from pg_hba.conf

# Allow connections from localhost for all users/databases
host    all             all             127.0.0.1/32            scram-sha-256

# Allow 'app_user' from specific IP range to 'app_db'
host    app_db          app_user        192.168.1.0/24          scram-sha-256

# Deny all other connections (implicit if no other rules match)

MySQL:使用 GRANT 限制 IP

在 MySQL 中,创建用户或使用 GRANT 语句修改用户时,可以指定用户能够连接的主机,从而限制用户访问。

'user'@'host' 语法是关键:

  • 'localhost':只能从服务器本机连接。
  • '192.168.1.100':只能从指定的 IP 地址连接。
  • '%':可以从任意主机连接(务必谨慎使用!)。
  • '192.168.1.%':可以从 192.168.1.x 范围内的任意 IP 连接。

请始终使用限制性最强的主机设置。

CREATE USER 'app_user'@'192.168.1.10' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'192.168.1.10';
FLUSH PRIVILEGES;

安全最佳实践

保护数据库连接是一项持续进行的工作。以下是一些最佳实践:

  • 最小权限:仅向用户和应用授予必要的权限。
  • StrongPassword:强制使用复杂密码,并定期更换。
  • 防火墙规则:使用服务器的防火墙(UFW/firewalld),将数据库端口(例如 PostgreSQL 使用 5432,MySQL 使用 3306)的访问限制为受信任的 IP。
  • 定期审计:定期检查数据库日志和访问配置。
  • 保持软件更新:及时为数据库服务器和操作系统应用安全补丁。

检查您的知识

以下哪些方法可以有效增强数据库连接的安全性?

回顾:保护您的数据

本课中,我们学习了保护数据库连接的重要技术:

  • SSL/TLS:对传输中的数据进行加密,确保机密性和完整性。我们了解了如何在 PostgreSQL 和 MySQL 中启用它,以及客户端如何安全地连接。
  • IP 限制:根据网络地址限制可以连接数据库的对象:PostgreSQL 使用 pg_hba.conf,MySQL 使用 GRANT 语句。
  • 最佳实践:我们还介绍了一般性的安全建议,例如使用强密码和定期审计。

落实这些措施后,您可以显著降低未经授权的访问和数据泄露风险。

常见问题解答

「保护数据库连接」课时是免费的吗?

是的 — 「保护数据库连接」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Linux Server Deployment & SSH Mastery 课程的其余内容,请升级到 CoddyKit PRO。 Linux Server Deployment & SSH Mastery 课程共包含 4 节课。

「保护数据库连接」这节课中我会学到什么?

使用 SSL/TLS 配置安全的数据库连接,并根据 IP 地址限制访问,以增强安全性。 你通过在浏览器中直接运行的动手代码来练习 Linux Server Deployment & SSH Mastery,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Linux Server Deployment & SSH Mastery 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Linux Server Deployment & SSH Mastery 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「保护数据库连接」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Linux Server Deployment & SSH Mastery 课中编写并运行代码吗?

能。每节 Linux Server Deployment & SSH Mastery 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 安装 PostgreSQL/MySQL
  2. 数据库用户与访问控制
  3. 保护数据库连接
  4. 数据库备份与恢复策略
← 返回 Linux Server Deployment & SSH Mastery