插件未加载是密码策略不生效的主因;须先用INSTALL PLUGIN加载并确认information_schema.plugins中状态为ACTIVE,再设参数,最后写入配置文件。

插件根本没加载,所有参数设置都白搭——这是 90% 的“不生效”问题的真正原因。
查插件状态不能只看变量,得查表
执行 SHOW VARIABLES LIKE 'validate_password%'; 返回空,不代表插件没装,只说明它没加载;返回一堆变量也不代表策略在生效,可能只是默认值残留。必须查真实状态:
-
SELECT * FROM information_schema.plugins WHERE plugin_name = 'validate_password';—— 若PLUGIN_STATUS不是ACTIVE,插件就没运行 - Linux 下确认
SELECT @@plugin_dir;路径下存在validate_password.so;Windows 是validate_password.dll - 配置文件里写的是
plugin-load-add = validate_password.so,不是validate_password或带路径的完整名
5.7 必须用 INSTALL PLUGIN,UNINSTALL 不支持
MySQL 5.7 不支持 UNINSTALL PLUGIN,但启用必须显式安装。漏掉这步,SET GLOBAL 全部静默失败:
- 进 MySQL 后执行:
INSTALL PLUGIN validate_password SONAME 'validate_password.so';(Windows 改为.dll) - 随后立刻执行
SELECT * FROM information_schema.plugins WHERE plugin_name = 'validate_password';确认状态为ACTIVE - 若报错
ERROR 1126 (HY000): Can't open shared library,八成是plugin_dir路径不对或文件权限不足
配置文件参数名和 SQL 不一致,写错就等于没写
SQL 里用下划线(如 validate_password.length),但 my.cnf 里必须去掉下划线且首字母小写:
- 正确:
validate_password_length = 12、validate_password_policy = MEDIUM - 错误:
validate_password.length = 12、validate_password_policy = 1(配置项名不合法,MySQL 直接忽略) - 别漏掉
[mysqld]段落包裹,放错位置(比如放到 [client] 下)也无效
STRONG 级别不配字典文件,实际退化为 MEDIUM
设 validate_password.policy = STRONG 后,如果 validate_password.dictionary_file 为空或路径不可读,MySQL 不报错,但校验逻辑自动降级——你看到的仍是 STRONG,实际只做 MEDIUM 检查:
- 文件需 MySQL 进程有读权限(非 root 启动时尤其注意)
- 每行一个单词,无空行、无 BOM、无注释
- 设了 STRONG 却仍能设
password123?先查这个文件是否真被加载(SHOW VARIABLES LIKE 'validate_password_dictionary_file';)
最常被忽略的一点:插件加载和参数设置是两件事,顺序不能反——必须先确认 ACTIVE,再 SET GLOBAL,最后才写入配置文件并重启。中间任何一环断开,策略就悬在半空。



















