mysql 5.7中validate_password插件没生效,首要原因是未正确加载并激活;需执行show plugins或查询information_schema.plugins确认状态为active,否则后续所有配置均无效。

MySQL 5.7中validate_password插件没生效?先确认是否真装上了
很多操作失败的根源是误以为插件已加载,其实根本没装成功。执行 SHOW PLUGINS; 后查不到 validate_password 行,或状态不是 ACTIVE,就说明插件未激活。
Linux 下必须用 INSTALL PLUGIN validate_password SONAME 'validate_password.so';(注意后缀是 .so,不是 .dll 或其他);Windows 才用 .dll。如果报错 Plugin 'validate_password' is not loaded,大概率是路径不对或文件缺失——别自己下载,5.7 自带,只需确认 plugin_dir 指向正确(可查 SELECT @@plugin_dir;)。
装完立刻验证:SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'validate_password';,结果必须是 ACTIVE。否则后续所有 SET 操作都无效。
SET GLOBAL 只临时生效,重启就丢:必须写进 my.cnf
SET GLOBAL validate_password.policy = 2; 这类命令只影响当前运行实例,MySQL 一重启,参数全回默认值。等保检查时发现策略“失效”,八成是漏了持久化配置。
编辑 /etc/my.cnf(或 /etc/mysql/my.cnf),在 [mysqld] 段下添加:
plugin-load-add = validate_password.so validate-password = FORCE_PLUS_PERMANENT validate_password_policy = STRONG validate_password_length = 12 validate_password_mixed_case_count = 1 validate_password_number_count = 1 validate_password_special_char_count = 1
注意三点:
• validate-password(带连字符)是配置项名,不是 validate_password;
• FORCE_PLUS_PERMANENT 确保插件无法被卸载,且启动即加载;
• 所有 validate_password_* 参数必须在 [mysqld] 下,不能放错段落。
改完必须重启 MySQL:systemctl restart mysqld(CentOS/RHEL)或 service mysql restart(Ubuntu/Debian)。
将 LaTeX(.tex)学术论文转换为 Word(.docx),支持可编辑的 OMML 公式、原生 Word 表格、嵌入图形、IEEE 双栏排版及参考文献
密码长度设不上去?检查依赖参数的最小约束
设 validate_password_length = 12 却报错“Invalid argument”,常见原因是它低于底层硬性下限。MySQL 要求:
-
validate_password_length≥validate_password_number_count+validate_password_special_char_count+ (2 ×validate_password_mixed_case_count)
比如你设了 number_count = 1、special_char_count = 1、mixed_case_count = 1,那长度至少得是 1+1+2 = 4。但若你设了 mixed_case_count = 2,长度就必须 ≥ 1+1+4 = 6。所以调高长度前,先确认其他计数参数没设得过大。
另一个坑:validate_password_check_user_name = ON(默认开启)会拒绝包含用户名的密码,比如用户叫 admin,密码含 admin 就直接被拦——测试时容易卡在这儿,建议初期设为 OFF 排障。
测试策略是否真起作用:别只靠 CREATE USER
很多人用 CREATE USER 'test'@'localhost' IDENTIFIED BY '123456'; 测试,但这个语句在 5.7 中可能不触发校验(尤其低版本补丁不全时)。更可靠的方式是:
- 对已有用户改密:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'weak'; - 或直接设全局密码:
SET PASSWORD = PASSWORD('weak');
只要返回 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements,就说明插件和策略都在工作。
顺手验证强度分值:SELECT VALIDATE_PASSWORD_STRENGTH('MyP@ssw0rd123'); 返回 100 才算真正达标。低于 60 基本等于白配——STRONG 策略下,缺一个条件(比如少个特殊符)就掉大分。
最后提醒:插件启用后,所有密码操作(包括复制账号、从备份恢复用户)都会校验。生产环境上线前,务必用真实弱密码组合跑一遍 ALTER USER,避免半夜被锁库。










