必须先启用validate_password插件或组件,否则所有策略参数均静默失效;5.7用INSTALL PLUGIN查plugins表验证,8.0.17+优先用INSTALL COMPONENT查component表,再SET GLOBAL配置policy、length等参数并写入my.cnf持久化。

必须先启用 validate_password 插件或组件,否则所有参数设置都无效——这是配置失败最常见原因。
确认插件/组件是否已加载
MySQL 5.7 和 8.0+ 处理方式不同,不能混用:
- 5.7 查插件表:
SELECT * FROM information_schema.plugins WHERE plugin_name = 'validate_password';,无结果或状态为DISABLED就没生效 - 8.0.17+ 推荐查组件表:
SELECT * FROM mysql.component WHERE component_urn = 'file://component_validate_password';,无结果说明组件未安装 -
SHOW VARIABLES LIKE 'validate_password%';返回空或全是默认值(如validate_password_length是 8),基本可判定插件/组件根本没加载
正确启用方式(按版本区分)
写错加载命令会导致后续所有配置静默失效:
- MySQL 5.7:
INSTALL PLUGIN validate_password SONAME 'validate_password.so';(Linux)或'validate_password.dll'(Windows);然后在my.cnf中加:[mysqld] plugin-load-add = validate_password.so validate_password = FORCE_PLUS_PERMANENT
- MySQL 8.0.17+:优先用组件方式:
INSTALL COMPONENT 'file://component_validate_password';;若报错再退回到插件方式(但注意新版可能已移除.so文件,硬写会触发ERROR 1126) - 切勿在 8.0 中执行
INSTALL PLUGIN validate_password SONAME 'validate_password.so'后不验证文件是否存在——很多发行版(如某些云厂商定制版)已删掉该文件
参数设置要点与常见陷阱
配置文件和 SQL 中参数名格式不一致,写错就等于没配:
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
- SQL 中用下划线:
SET GLOBAL validate_password.policy = 1;、SET GLOBAL validate_password.length = 10; - 配置文件中必须去掉点号、全小写、用下划线:
validate_password_policy = 1、validate_password_length = 10(写成validate_password.policy或validate_password.Policy都不生效) -
validate_password.policy建议直接用数字:0(LOW)、1(MEDIUM)、2(STRONG);单词容易拼错且部分版本不识别 -
validate_password_mixed_case_count = 1表示“至少 1 个大写 + 至少 1 个小写”,不是“总共 1 个字母” - STRONG 级别若未设
validate_password_dictionary_file,实际效果等同于 MEDIUM
策略只对 CREATE/ALTER USER 生效,不校验已有密码
很多人以为启用后立刻强制所有账户改密,其实不是:
- 策略仅在执行
CREATE USER、ALTER USER ... IDENTIFIED BY、SET PASSWORD时触发校验 - root 初始密码不受控,首次登录后强制改密(
ERROR 1820)才走这套逻辑 - 修改配置后,已有弱密码用户不会被自动锁定或提示,只有下次改密时才会报错
- 临时设置(
SET GLOBAL)重启即失效,必须写入配置文件并重启mysqld才持久化
最容易被忽略的是:插件加载和参数配置是两步,缺一不可;而参数名大小写、分隔符、版本适配这些细节,稍不注意就会让整个策略形同虚设。










