必须先加载validate_password插件或组件,否则所有策略配置静默失效;5.7用INSTALL PLUGIN查plugins表,8.0.17+用INSTALL COMPONENT查component表;STRONG策略需显式设length=12、mixed_case_count=2等参数并配置有效dictionary_file,且my.cnf中参数名须为下划线格式。

必须先加载 validate_password 插件或组件,否则所有密码策略配置都静默失效——这是 90% 的人踩坑的起点。
确认插件/组件是否已加载
不要猜版本,直接查状态。MySQL 5.7 和 8.0+ 加载机制完全不同,混用必失败:
- MySQL 5.7:执行
SELECT * FROM information_schema.plugins WHERE plugin_name = 'validate_password';,返回空则未加载 - MySQL 8.0.17+:执行
SELECT * FROM mysql.component WHERE component_urn = 'file://component_validate_password';,无结果说明组件未安装 - 若
SHOW VARIABLES LIKE 'validate_password%';返回空或只有默认值(如validate_password.length是 8),基本可判定未启用
正确加载方式(按版本区分)
写错加载方式会导致后续所有 SET GLOBAL 配置被忽略,且不报错:
- MySQL 5.7:运行
INSTALL PLUGIN validate_password SONAME 'validate_password.so';,并在my.cnf的[mysqld]段落中添加plugin-load-add=validate_password.so和validate_password=FORCE_PLUS_PERMANENT - MySQL 8.0.17+:优先用组件方式,执行
INSTALL COMPONENT 'file://component_validate_password';;若报Component not found,说明二进制包不含该组件,需升级或重装官方包 - 切勿在 8.0 中硬写
SONAME 'validate_password.so'—— 新版已移除该文件,会触发ERROR 1126 (HY000): Can't open shared library
配置 STRONG 策略以满足等保三级要求
MEDIUM 级别不保证字典检查、不强制 mixed_case_count 等参数生效,等保三级明确要求 STRONG:
- 必须显式设置:
SET GLOBAL validate_password.policy = 'STRONG'; - 关键参数要逐项指定(仅设
length = 8不够):SET GLOBAL validate_password.length = 12;、SET GLOBAL validate_password.mixed_case_count = 2;、SET GLOBAL validate_password.number_count = 2;、SET GLOBAL validate_password.special_char_count = 1;、SET GLOBAL validate_password.check_user_name = ON; -
validate_password.dictionary_file必须指向有效路径(如/usr/share/dict/words),否则 STRONG 退化为 MEDIUM,字典检查失效 - 配置文件中参数名格式不同:
my.cnf里写validate_password_length = 12(下划线、小写),不能写成validate_password.length(SQL 中合法,配置文件中无效)
策略只对 CREATE USER / ALTER USER 生效
很多人误以为启用后 root 初始密码或已有用户密码会自动校验,其实不会:
- 仅在执行
CREATE USER或ALTER USER ... IDENTIFIED BY时触发校验 - root 首次登录后强制改密(
ERROR 1820)走同一套逻辑,但已有用户的密码不会被回扫 - 务必预留一个免校验管理账号(如用
mysql_native_password+ 强密码创建的专用运维账号),防止策略过严导致业务中断
最易被忽略的是:STRONG 级别下 validate_password.dictionary_file 路径不可为空或无效,且配置文件中的参数命名格式与 SQL 命令不一致——这两处出错,策略就形同虚设。


















