必须先确认validate_password插件已ACTIVE状态,再显式设置length、mixed_case_count等参数;仅设policy不生效,且配置需重启服务或用SET PERSIST持久化,否则仍为默认值。
插件不是“开了就自动拦住所有弱密码”的开关,它必须显式加载、正确配置,并且只对新建或修改密码的操作生效。没加载插件、策略设成
、或只改配置不重启服务,都会让策略形同虚设。
怎么确认 validate_pass
word
插件是否真在运行
很多问题其实卡在第一步:插件压根没起来。
登录 MySQL 后执行:
如果没结果,或
是
,说明插件未启用。
MySQL 5.7:必须手动执行
—— 注意不能漏掉
和后缀
,否则报错
MySQL 8.0+:插件已内置,但默认不激活,仍需执行
;从 8.0.16 起也可用
(更推荐,稳定性更好)
Linux 下检查文件是否存在:
或
;Windows 对应
为什么设了 policy=1 还能设出弱密码
因为
不是布尔开关,而是策略等级,且它的实际校验逻辑和你直觉可能不同。
AI Word
一款强大的 AI 智能内容创作平台,致力于帮助用户高效生成高质量、原创且符合 SEO 规范的各类文章。
下载
(
):只校验
(默认 8),其他参数全被忽略
(
,MySQL 5.7+ 默认值):才真正启用多类字符要求——必须同时满足:
(即至少 1 个大写 + 1 个小写)、
、
;且
必须 ≥ 8
(
):额外启用字典检查(需指定
),但该操作会显著拖慢密码设置速度,生产环境慎用
关键点:
已有用户的密码不会被回扫
。把 policy 从 0 改成 1,
密码不会立刻失效,但下次执行
就会触发校验并报错
配置写进 my.cnf 但不生效的常见原因
写配置 ≠ 策略生效,中间漏掉一步就白干。
必须加在
段下,不能放在
或全局其他位置
推荐用
,而不是
,避免覆盖其他已加载插件
变量名要写全:
、
等,不能简写成
改完配置必须重启mysqld 服务
(
或
),仅 reload 配置不加载插件
重启后仍需验证:执行
,确认所有值是你设的,且
显示为
或
,不是
怎么快速验证策略是否起作用
别等上线出问题,用一条语句当场测。
用内置函数打分:
返回 0–100 的整数,≥ 50 才算中等强度,≥ 80 才算强(注意:该函数不依赖插件是否启用,但结果受当前
变量影响)
直接试设密码:
应该报错
注意客户端兼容性:某些老版本客户端(如 MySQL 5.7 客户端连 8.0 服务端)可能因协议差异导致密码设置失败,此时先确认是策略问题还是连接层问题
插件加载和策略生效之间存在明确的因果链:加载失败 → 全部无效;policy 设错 → 校验逻辑降级;配置未重启 → 参数不加载;已有密码不受影响 → 安全加固只从下次改密开始。最容易被跳过的,其实是重启服务这一步。
validate_passwordLOWSELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'validate_password';PLUGIN_STATUSDISABLEDINSTALL PLUGIN validate_password SONAME 'validate_password.so';SONAME.soERROR 1123 (HY000): Can't initialize function 'validate_password'INSTALL PLUGININSTALL COMPONENT 'file://component_validate_password';/usr/lib64/mysql/plugin/validate_password.so/usr/lib/mysql/plugin/validate_password.so.dllvalidate_password.policypolicy = 0LOWvalidate_password.lengthpolicy = 1MEDIUMmixed_case_count ≥ 1number_count ≥ 1special_char_count ≥ 1lengthpolicy = 2STRONGvalidate_password.dictionary_filerootALTER USER ... IDENTIFIED BY[mysqld][client]plugin-load-add = validate_password.soplugin-loadvalidate_password_policyvalidate_password_lengthpassword_policysystemctl restart mysqlservice mysqld restartSHOW VARIABLES LIKE 'validate_password%';validate_password_policy120SELECT VALIDATE_PASSWORD_STRENGTH('MyPass123!');validate_password.*CREATE USER 'test'@'localhost' IDENTIFIED BY '123';ERROR 1819 (HY000): Your password does not satisfy the current policy requirements