mysql如何避免弱密码风险_mysql密码策略设置

MySQL默认不启用密码强度校验,需手动安装validate_password插件并设为MEDIUM策略,配置最小长度、数字、大小写及特殊字符要求,同时重置弱密码账户并辅以匿名用户清理、root远程限制等安全措施。

MySQL 本身不自带强制密码强度校验功能,需通过插件(如 validate_password)启用密码策略,否则默认允许如 123456password 等弱密码,存在明显安全风险。

启用 validate_password 插件

该插件是 MySQL 官方提供的密码强度验证模块,支持最低长度、数字、大小写字母、特殊字符等要求。

  • 登录 MySQL 后执行:
    INSTALL PLUGIN validate_password SONAME 'validate_password.so';
  • 确认是否加载成功:
    SHOW PLUGINS; 查看 validate_password 状态为 ACTIVE
  • 若提示找不到 so 文件,说明插件未安装(常见于精简版 MySQL 或某些 Docker 镜像),需安装 mysql-common 或对应版本的插件包

配置密码策略等级

插件提供三个强度等级:LOW(仅长度)、MEDIUM(长度+数字+大小写+特殊字符)、STRONG(额外校验字典文件)。推荐设为 MEDIUM

  • 查看当前策略:
    SELECT @@validate_password_policy;
  • 设置为 MEDIUM:
    SET GLOBAL validate_password_policy = MEDIUM;
  • 同时可调整具体参数(如最小长度):
    SET GLOBAL validate_password_length = 8;
    SET GLOBAL validate_password_number_count = 1;
    SET GLOBAL validate_password_mixed_case_count = 1;
    SET GLOBAL validate_password_special_char_count = 1;
  • 为使重启后仍生效,将上述配置写入 my.cnf[mysqld] 段落中

对已有用户强制重置密码

插件启用后,仅对新设或修改的密码生效。已有弱密码用户不会被自动拦截,需主动更新。

  • 检查是否存在低强度密码用户:
    SELECT user, host, password_last_changed FROM mysql.user WHERE password_last_changed IS NULL OR password_last_changed = '0000-00-00 00:00:00';(部分版本适用)
  • 手动重置高危账户密码:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass#2025';
  • 建议优先重置 root、管理员及远程访问账户

补充安全建议

仅靠密码策略不够,还需结合其他措施降低风险。

  • 禁用匿名用户:
    DROP USER ''@'localhost';
  • 限制 root 远程登录:
    只保留 'root'@'localhost',删除 'root'@'%'
  • 定期轮换关键账户密码,尤其在人员变动或系统迁移后
  • 开启 MySQL 错误日志与审计日志(如使用企业版或插件 audit_log),便于追溯异常登录尝试
不复杂但容易忽略:插件必须显式安装并配置,MySQL 默认不启用任何密码强度检查。