必须先确认validate_password插件或组件已ACTIVE加载,再设置参数;5.7用INSTALL PLUGIN,8.0.17+用INSTALL COMPONENT;SQL中用下划线命名,my.cnf中需改为小写无下划线格式,且所有STRONG策略参数须显式配置并写入配置文件持久化。

没启用 validate_password 插件或组件,所有策略参数都静默失效——这是配置失败最常见原因,不是密码写得不对,是校验根本没开。
怎么确认 validate_password 真的在运行?
别猜版本,直接查表。两个命令必须都执行:
-
SELECT * FROM information_schema.plugins WHERE plugin_name = 'validate_password';—— 如果返回空或PLUGIN_STATUS = DISABLED,说明插件没装或没启 -
SELECT * FROM mysql.component WHERE component_urn = 'file://component_validate_password';—— MySQL 8.0.17+ 必须有结果,否则组件未安装 -
SHOW VARIABLES LIKE 'validate_password%';返回全空,或只有默认值(如validate_password_length = 8但其他全是 NULL 或 0),基本可断定未生效
按版本选对加载方式,否则 SET 全部白做
MySQL 5.7 和 8.0.17+ 加载机制不同,混用会报 ERROR 1126 (HY000): Can't open shared library 或参数被忽略:
Contact Form 7 是 Rock Lobster Inc. 公司长期运行的 WordPress 表单插件,拥有超过 1000 万次活跃安装,并在 contactform7.com 提供官方文档。此技能适用于需要了解网站表单、邮件模板、验证行为和 shortcode 位置在 Contact Form 7 中实际处理方式的代理。
- 5.7:用插件方式,执行
INSTALL PLUGIN validate_password SONAME 'validate_password.so';(Linux)或'validate_password.dll'(Windows) - 8.0.17+:优先用组件方式,执行
INSTALL COMPONENT 'file://component_validate_password';(注意单引号 +file://前缀) - 无论哪种,都要在
my.cnf的[mysqld]段补上持久化配置,比如plugin-load-add = validate_password.so或validate_password = FORCE_PLUS_PERMANENT
SET GLOBAL 和 my.cnf 的参数名不一致,写错就失效
SQL 中用下划线,配置文件里必须去掉下划线且首字母小写:
- SQL 合法:
SET GLOBAL validate_password.length = 12;、SET GLOBAL validate_password.policy = MEDIUM; - my.cnf 必须写成:
validate_password_length = 12、validate_password_policy = 1(推荐用数字,避免大小写/引号歧义) -
STRONG级别必须配validate_password_dictionary_file,否则实际退化为MEDIUM;路径要 MySQL 进程有读权限,且文件每行一个单词
ERROR 1819 不是随机报错,是策略触发的明确信号
这个错误只在 ALTER USER / CREATE USER 设置新密码时出现,它不检查已有账户,只拦住不合规的新设或修改动作:
-
policy = LOW时,number_count、special_char_count等参数完全不生效,只校验长度 -
MEDIUM要求四类字符(大写、小写、数字、特殊字符)中至少三类同时存在,缺一不可 - 临时绕过可用
SET GLOBAL validate_password_policy = LOW;,但生产环境切勿长期禁用
最容易被忽略的是:插件加载和参数设置是两步,缺一不可;而配置文件改完不重启 mysqld,或者只执行 SET 不写入配置文件,都会导致策略看似设置了、实则没起效。


















