插件未加载则所有密码策略无效,必须先执行show plugins确认validate_password状态为active,否则需用install plugin或install component加载;strong策略下须显式配置policy、length、mixed_case_count、number_count、special_char_count五个参数并写入my.cnf,缺一不可。

插件没加载,后续所有密码策略都无效——这是安装后立即启用时最常卡住的一步。
确认 validate_password 插件是否已加载
刚装完 MySQL,SHOW VARIABLES LIKE 'validate_password%' 返回空,不是配置错了,是插件根本没加载。别急着改参数,先验证状态:
- 执行
SHOW PLUGINS;,找validate_password行,Status必须是ACTIVE - 若没出现:MySQL 5.7 运行
INSTALL PLUGIN validate_password SONAME 'validate_password.so';;Windows 改用.dll - MySQL 8.0.17+ 必须用组件方式:
INSTALL COMPONENT 'file://component_validate_password';,再查SELECT * FROM mysql.component WHERE component_id = 'validate_password'; - 如果提示
Plugin 'validate_password' is disabled,检查my.cnf是否有disable-plugin-validate_password这类禁用项,删掉并重启mysqld
设置 STRONG 策略并确保参数生效
SET GLOBAL validate_password.policy = STRONG 单独执行不够,STRONG 模式下多个参数必须显式设全,否则会退化为仅检查长度:
- 至少设这 5 个参数:
validate_password.policy(值为STRONG或2)、validate_password.length(建议 ≥10)、validate_password.mixed_case_count(如设为2,表示大小写各至少 2 位)、validate_password.number_count、validate_password.special_char_count -
validate_password_check_user_name = ON必开,否则用户名可直接当密码用 - 设完立刻执行
SHOW VARIABLES LIKE 'validate_password%';核对,确保看到的值不是OFF或空字符串 - 全局变量重启即失效,务必把上述参数写进
my.cnf的[mysqld]段,例如:validate_password_policy = STRONG、validate_password_length = 12
验证策略是否真拦截弱密码
变量值对了不等于策略起作用,必须触发真实校验逻辑:
- 执行
CREATE USER 'test'@'localhost' IDENTIFIED BY '123456';,应报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements - 若没报错,说明插件未生效或参数未生效——回退到前两步重新检查
- STRONG 模式下若配置了
validate_password_dictionary_file但文件不存在或 mysqld 无读权限,会报Plugin 'validate_password' could not be initialized,此时策略完全失效 - 可用函数辅助验证:
SELECT VALIDATE_PASSWORD_STRENGTH('MyPass123!');返回 0–100 分值,低于 50 基本过不了 STRONG 校验
注意 STRONG 模式下 password_history 才可用
很多管理员配了 password_history 却发现不生效,是因为它只在 validate_password.policy = STRONG 时才激活:
- 必须先确保策略是 STRONG,再设
validate_password.history = 5和validate_password.reuse_interval = 90 - 用户执行
ALTER USER ... IDENTIFIED BY时,MySQL 才会查mysql.password_history表比对旧密码 -
SET PASSWORD FOR在 MySQL 8.0+ 默认被禁用,不走校验;要用ALTER USER或CREATE USER才触发完整策略链
真正落地的关键不在“装上”,而在“每一步都验证结果”——尤其是 SHOW VARIABLES LIKE 'validate_password%' 有返回且值正确、CREATE USER 明确报错、VALIDATE_PASSWORD_STRENGTH() 分值达标,三者缺一不可。STRONG 模式对字典文件和参数完整性极其敏感,漏一个就全线失效。











