mysql 5.7需手动安装validate_password插件:执行install plugin validate_password soname 'validate_password.so'(无需重启),再用select * from information_schema.plugins验证状态或show global variables like 'validate_password%'确认参数生效。

MySQL 5.7 怎么装 validate_password 插件
MySQL 5.7 默认不加载 validate_password 插件,必须手动安装,否则所有策略参数都不可用,SHOW VARIABLES LIKE 'validate_password%' 会查不到任何结果。
执行以下语句即可完成安装(无需重启):
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
验证是否成功:
- 运行
SELECT * FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'validate_password';,有记录即表示已加载 - 或直接查变量:
SHOW GLOBAL VARIABLES LIKE 'validate_password%';,能看到一堆validate_password.xxx参数才算到位
⚠️ 容易踩的坑:
- 插件名写成
validate_password_plugin或路径写错(比如.dll用在 Linux 上)会报ERROR 1126 (HY000) - 没加
plugin-load-add=validate_password.so到my.cnf,MySQL 重启后插件自动消失 - 某些精简版 MySQL(如部分 Docker 镜像)压根没打包
validate_password.so文件,得换发行版或手动复制
MySQL 8.0 是装插件还是组件
MySQL 8.0.17+ 推荐用 component 方式管理,但兼容旧语法——也就是说,你照着 5.7 的 INSTALL PLUGIN 命令仍能跑通,只是底层机制不同。
更规范的做法是注册为组件:
INSTALL COMPONENT 'file://component_validate_password';
但注意:
-
file://路径必须指向实际存在的组件文件(通常在share/mysql/component_validate_password下) - 若执行失败,先确认
SELECT * FROM performance_schema.component_table;是否为空,空则说明组件目录未初始化 - 多数云厂商(如阿里云 RDS、腾讯云 CDB)默认已预装组件,你只需配置参数,不用手动 install
真正影响行为的是参数是否生效,不是“插件 or 组件”这个表象。
validate_password.policy 设成 MEDIUM 为什么还允许简单密码
设了 SET GLOBAL validate_password.policy = MEDIUM 却发现 ALTER USER 'u'@'%' IDENTIFIED BY 'abc123!'; 还是能过,大概率是这几个原因:
- 当前连接用户缺少
SYSTEM_VARIABLES_ADMIN权限,导致策略变量读取失败,校验静默跳过 - 客户端用了旧协议(如 MySQL 5.6 客户端连 8.0 服务端),绕过了插件链
- 密码中字母、数字、特殊字符数量没达标:MEDIUM 要求至少 1 个数字 + 1 个字母 + 1 个特殊字符,且总长 ≥8;
abc123!是 7 位,不满足validate_password.length默认值(8) - 没显式设置
validate_password.number_count等参数,它们有默认值,但依赖policy级别联动,单独改 policy 不一定触发全部约束
建议一次性配全:
SET GLOBAL validate_password.policy = MEDIUM;<br>SET GLOBAL validate_password.length = 8;<br>SET GLOBAL validate_password.number_count = 1;<br>SET GLOBAL validate_password.char_count = 1;<br>SET GLOBAL validate_password.special_char_count = 1;
云数据库(RDS/CDB)怎么持久化配置
云环境不能直接改 my.cnf,必须走控制台或 API。但要注意主备节点一致性问题:
- RDS MySQL 主节点装了插件,**不会自动同步到备节点**;主备切换后新主节点若没装,密码策略立即失效
- 腾讯云 CDB 支持通过
ModifyInstancePasswordComplexityAPI 批量设置多个实例,参数名在不同版本中不一致:
– MySQL 8.0 用validate_password.length
– MySQL 5.7 用validate_password_length(下划线分隔) - 即使你在控制台把
length设成 5,RDS 仍强制要求密码 8~32 位——这是平台层硬限制,绕不过,除非用SET PASSWORD命令直连修改(仅限测试)
最稳妥的做法:主备节点都手动执行一次 INSTALL PLUGIN,再统一用控制台配参,避免策略漂移。











