3. 认证机制与连接安全
数据库访问控制的第一道闸门是“证明你是谁”。如果认证环节被绕过或弱化,后续的授权、审计、脱敏都失去意义。本节围绕数据库认证与连接安全,从密码策略、多因素认证、证书认证、Kerberos/LDAP 集成到连接加密,梳理一条从“身份证明”到“通道保护”的完整链路。
一、密码策略:不是设个密码就完事
数据库密码策略的核心目标,是提高暴力破解和撞库的成本。以 MySQL 8.0 为例,可以通过 validate_password 组件强制密码复杂度:
INSTALL COMPONENT 'file://component_validate_password';
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;
这样设置后,密码必须至少 12 位,且同时包含大小写字母、数字和特殊字符。策略之外,还需关注三件事:一是密码有效期,通过 default_password_lifetime 控制,例如设为 90 天;二是失败锁定,MySQL 8.0 提供 FAILED_LOGIN_ATTEMPTS 和 PASSWORD_LOCK_TIME,连续失败 5 次锁定 1 天;三是历史密码不可复用,避免用户改回旧密码。PostgreSQL 则通过 password_encryption = scram-sha-256 强制使用 SCRAM 认证,替代已不安全的 md5。
二、多因素认证:密码之外的第二个证据
多因素认证(MFA)要求用户提供两类以上证据:知识(密码)、持有(令牌、手机)、生物特征。数据库本身对 MFA 的原生支持有限,常见做法是借助外部认证代理。例如 PostgreSQL 可结合 pam 认证,把 MFA 交给系统的 PAM 模块;MySQL 企业版支持 LDAP 和 Kerberos 插件,可在此基础上叠加一次性口令。
一个典型的 MFA 登录流程是:用户输入密码通过第一因素验证,系统向绑定的 TOTP 应用发送动态码,用户输入 6 位动态码完成第二因素。动态码基于时间窗口生成,通常 30 秒刷新一次,服务端允许前后一个窗口的容差。MFA 的价值在于:即使密码泄露,攻击者没有第二因素也无法登录。
三、证书认证:用密钥对替代密码
证书认证基于 TLS 双向认证,客户端持有由 CA 签发的证书和私钥,数据库服务端验证证书链和 CN/SAN 字段。MySQL 中可创建要求 SSL 的用户:
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass!2024'
REQUIRE X509;
-- 或更严格:REQUIRE SUBJECT '/CN=app_user/O=Example'
PostgreSQL 则在 pg_hba.conf 中配置 hostssl all all 0.0.0.0/0 cert clientcert=verify-full,要求客户端证书的 CN 与数据库用户名一致。证书认证适合服务间通信和自动化任务,因为无需人工输入密码,且私钥可存放在受保护的密钥库中。
四、Kerberos 与 LDAP 集成:集中身份管理
当企业已有统一身份目录时,数据库不应维护独立账号体系。Kerberos 提供票据式认证,用户先向 KDC 申请 TGT,再用 TGT 申请数据库服务票据,数据库验证票据后建立连接。MySQL 企业版和 PostgreSQL 都支持 GSSAPI/Kerberos 认证。LDAP 集成则更常见:数据库将用户名和密码转发给 LDAP 服务器验证,或直接查询目录中的用户属性。MySQL 的 authentication_ldap_simple 插件即属此类。
集成时要注意:LDAP 绑定密码应使用专用只读账号,避免明文传输,配合 LDAPS 或 StartTLS;Kerberos 需确保时钟同步,否则票据会因时间偏差失效。
五、连接加密:保护传输中的凭据与数据
即使认证通过,如果连接是明文的,密码和数据仍可能被嗅探。因此必须启用 TLS。MySQL 中通过 require_secure_transport = ON 强制所有连接使用 SSL/TLS;PostgreSQL 设置 ssl = on 并配置证书路径。TLS 版本应不低于 1.2,推荐 1.3,并禁用弱加密套件。
下图展示了从客户端到数据库的认证与连接安全链路,涵盖密码、MFA、证书、Kerberos/LDAP 以及 TLS 加密通道的关系。
六、组合策略与落地建议
实际环境中,认证方式往往组合使用。人员账号采用“密码 + MFA”,服务账号采用“证书 + 固定 IP 白名单”,内部系统间调用采用 Kerberos 票据。连接层统一强制 TLS,并定期轮换证书和密钥。建议按以下顺序落地:先启用 TLS 和强密码策略,再对高权限账号开启 MFA,最后将服务账号迁移到证书或 Kerberos 认证。
| 认证方式 | 适用对象 | 关键配置 | 注意事项 |
|---|---|---|---|
| 密码策略 | 人员账号 | 复杂度、有效期、失败锁定 | 避免服务账号使用固定密码 |
| MFA | 高权限人员 | TOTP / PAM 集成 | 动态码时间窗口容差 |
| 证书认证 | 服务账号 | REQUIRE X509 / clientcert | 私钥保护与证书轮换 |
| Kerberos/LDAP | 企业统一身份 | GSSAPI / LDAPS | 时钟同步、只读绑定账号 |
| TLS 加密 | 所有连接 | require_secure_transport / ssl=on | 禁用弱套件,版本≥1.2 |
认证与连接安全不是一次性配置,而是持续运营的过程。密码策略需要定期审查,证书需要提前轮换,MFA 需要覆盖新增的高权限账号,TLS 版本需要跟随安全公告升级。只有把认证链路中的每一环都守住,数据库的访问控制才真正有根基。