mysql如何启用多因素认证_mysql安全认证方案

10次阅读

mysql 8.0.27+ 社区版支持mfa,需加载authentication_fido、authentication_pam或authentication_ldap_sasl等插件,并通过create user … require multifactor显式启用双因子认证。

mysql如何启用多因素认证_mysql安全认证方案

MySQL 8.0+ 如何启用 MFA(多因素认证)

MySQL 原生支持多因素认证,但仅限于企业版(MySQL Enterprise Edition)或 MySQL 8.0.27+ 社区版(需配合插件和外部认证服务)。社区版默认不内置 TOTP 或 SMS 支持,必须通过 authentication_fidoauthentication_ldap_sasl 等插件间接实现,且依赖操作系统级 PAM 或 LDAP 服务。

  • 确认版本:select VERSION(); —— 必须 ≥ 8.0.27 才支持 CREATE USER ... REQUIRE MULTIFACTOR
  • 加载插件(以 FIDO 为例):INSTALL PLUGIN authentication_fido SONAME 'authentication_fido.so';linux 下路径可能为 plugin_dir 中的 authentication_fido.so
  • 创建 MFA 用户时需显式指定两个认证方法:CREATE USER 'alice'@'%' IDENTIFIED WITH mysql_native_password BY 'p1' REQUIRE MULTIFACTOR AUTHENTICATION using 'authentication_fido' AS 'second_factor';
  • 注意:第一个因子(如密码)仍走本地验证,第二个因子必须由对应插件处理;若插件未启用或配置错误,用户将无法登录,且错误提示常为 access denied for user,而非明确的 MFA 失败

用 PAM 实现 MySQL 多因素认证(Linux 系统级方案)

社区版最可行的 MFA 落地方式是通过 PAM 桥接,让 MySQL 将第二因子验证委托给系统 PAM 模块(如 pam_google_authenticator),适合已有 Linux 运维体系的场景。

  • 先安装并配置 PAM TOTP(例如在 ubuntu 上:apt install libpam-google-authenticator,然后为 MySQL 运行用户(通常是 mysql)生成密钥)
  • 编辑 /etc/pam.d/mysqld(若不存在则新建),添加一行:auth [success=ok default=bad] pam_google_authenticator.so secret=/var/lib/mysql-pam/${USER}.google_authenticator
  • 创建用户时使用:CREATE USER 'bob'@'%' IDENTIFIED WITH authentication_pam AS 'mysqld'; —— 此处 mysqld 对应 PAM service 名
  • 风险点:PAM 配置错误会导致所有 PAM 认证用户被锁死;建议先用测试用户验证,且保留一个 mysql_native_password 的管理员账号用于应急

为什么不能直接用 MySQL 内置密码策略替代 MFA

MySQL 的 validate_password 插件只约束密码强度(长度、字符类型等),它不解决「凭证泄露后仍可单次登录」的问题。MFA 的核心价值在于增加动态因子(时间令牌、生物特征、硬件密钥),而密码策略仍是静态凭证管理。

  • SET GLOBAL validate_password.policy = STRONG; 不等于启用 MFA,只是让 ALTER USER ... IDENTIFIED BY 拒绝弱密码
  • 即使开启 password_historypassword_reuse_interval,攻击者拿到当前有效密码仍可登录
  • 真正需要 MFA 的场景(如远程 dba 接入、云数据库公网访问),必须叠加第二验证通道,而非仅靠更复杂的密码

LDAP + MySQL 的 MFA 变通方案(适用于已有 AD/LDAP 环境)

如果组织已部署 Active Directory 或 OpenLDAP,并启用了 LDAP 多因素(如 microsoft azure MFA 或 Duo LDAP Proxy),可让 MySQL 通过 authentication_ldap_sasl 插件把认证请求转发过去,由 LDAP 服务完成双因子校验。

  • 需启用插件:INSTALL PLUGIN authentication_ldap_sasl SONAME 'authentication_ldap_sasl.so';
  • 用户创建语句中指定 LDAP base DN 和 bind user:CREATE USER 'carol'@'%' IDENTIFIED WITH authentication_ldap_sasl BY 'CN=carol,OU=Users,DC=example,DC=com';
  • 关键限制:MySQL 本身不参与第二因子交互,全程由 LDAP server 控制流程;若 LDAP server 未启用 MFA,该方案退化为单因子 LDAP 认证
  • 调试时常见错误:Authentication plugin 'authentication_ldap_sasl' cannot be loaded —— 多因插件未编译进二进制或缺少 SASL 库依赖(如 libsasl2-modules

实际部署中最容易被忽略的是插件加载顺序与权限隔离:MySQL 启动时若插件加载失败,不会中断服务,但后续 CREATE USER ... REQUIRE MULTIFACTOR 会静默失败或报错不明确。务必在配置文件中设置 plugin_load_add = authentication_fido.so 并检查 SHOW PLUGINS; 输出状态。

text=ZqhQzanResources