MySQL 8.0 中 validate_password 已升级为组件而非插件,必须用 INSTALL COMPONENT 'file://component_validate_password' 启用;若未安装,所有相关变量均无效,且重启后需在 my.cnf 中配置 plugin-load-add 兜底。

MySQL 8.0 中 validate_password 已不是传统插件,而是服务器组件(component),直接用 INSTALL PLUGIN 会报错 ERROR 1126 (HY000) 或静默失败——必须用 INSTALL COMPONENT 启用,否则所有策略参数(如 validate_password.length)全是摆设。
确认并安装 validate_password 组件
MySQL 8.0 默认不启用密码校验,查状态不能只看 SHOW PLUGINS,得查组件表:
- 执行
SELECT * FROM mysql.component WHERE component_name = 'validate_password';,若无结果,说明未安装 - 安装命令是
INSTALL COMPONENT 'file://component_validate_password';(注意不是SONAME) - 安装后立即生效,无需重启;但若 MySQL 重启后失效,需在
my.cnf的[mysqld]段加:plugin-load-add = validate_password.so(兼容性兜底) - 验证是否真起作用:运行
SHOW VARIABLES LIKE 'validate_password%';,有返回且值非空才算成功
设 policy = MEDIUM 或 STRONG 才真正生效
validate_password.policy 是总开关,不是“越数字越大越好”,而是决定哪些参数参与校验:
将 LaTeX(.tex)学术论文转换为 Word(.docx),支持可编辑的 OMML 公式、原生 Word 表格、嵌入图形、IEEE 双栏排版及参考文献
-
policy = 0(LOW):只校验length,其他_count参数全被忽略 -
policy = 1(MEDIUM):才启用mixed_case_count、number_count、special_char_count校验 -
policy = 2(STRONG):额外强制检查dictionary_file和check_user_name,但若字典路径不可读或文件不存在,组件会初始化失败,连ALTER USER都执行不了 - 等保三级明确要求“组合多种字符类型”,所以
policy至少设为1,推荐用数字而非单词:SET PERSIST validate_password.policy = 1;
四个 count 参数的含义和常见误配
这些参数不是独立生效的,它们的值受 policy 等级约束,且默认值极宽松(全是 1),容易误以为已达标:
-
validate_password.length:最小长度,默认 8,等保要求 ≥8,但建议设为 12 避开弱口令风险 -
validate_password.mixed_case_count:大小写字母**总数**至少几个(如Ab1!满足 1),不是“必须含大写+必须含小写”;若业务真要强制区分,得靠应用层 -
validate_password.number_count和validate_password.special_char_count:都默认为 1,但特殊字符只认 ASCII(!@#$%等),中文标点、emoji、全角符号无效 - 乱序设置会失败:比如先设
mixed_case_count = 1,但number_count还是 0,MySQL 可能拒绝该 SET 操作
现有用户改密时触发 ERROR 1820 怎么办
策略启用后,已有用户的密码不会被自动重检,但只要执行任何需要认证的操作(如 SELECT 1;),就会强制弹出 ERROR 1820 (HY000): You must reset your password using ALTER USER:
- 不能跳过,也不能用
SET PASSWORD或直接更新mysql.user表绕过 - 必须用
ALTER USER 'user'@'host' IDENTIFIED BY 'NewPass@123';重置,且新密码必须满足当前策略 - 批量处理前,先查隐患账户:
SELECT user, host FROM mysql.user WHERE LENGTH(authentication_string) < 10;(粗筛)或结合VALIDATE_PASSWORD_STRENGTH('test')函数评估 - 这个机制没有“宽限期”,上线前务必逐个验证关键账号,否则应用连接池可能集体断连
最易被忽略的是:组件加载成功 ≠ 策略生效;policy 设对了 ≠ 四个 count 参数自动达标;而线上改密报错 ERROR 1820 不是故障,是策略在正常工作——它只在用户下次认证时才强制干预,不是启动时扫描全库。


















