MySQL 本身不自带强制密码强度校验功能,需通过插件(如 validate_password)启用密码策略,否则默认允许如
123456、
password等弱密码,存在明显安全风险。
启用 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#2024';建议优先重置
root、管理员及远程访问账户
补充安全建议
仅靠密码策略不够,还需结合其他措施降低风险。
禁用匿名用户:DROP USER ''@'localhost';限制 root 远程登录:
只保留
'root'@'localhost',删除
'root'@'%'定期轮换关键账户密码,尤其在人员变动或系统迁移后 开启 MySQL 错误日志与审计日志(如使用企业版或插件 audit_log),便于追溯异常登录尝试 不复杂但容易忽略:插件必须显式安装并配置,MySQL 默认不启用任何密码强度检查。
