MySQL 8.4 默认不激活 validate_password,需先 INSTALL PLUGIN 加载,再用 SET PERSIST 持久化配置 length、policy 等参数,否则重启失效;策略仅对新建/修改密码生效,且变量名全小写、区分大小写。
MySQL 8.4 仍内置 validate_password 插件(非默认激活),但安装后不会自动加载,也不带预设强度规则。你看到的“密码太弱”报错,往往是因为插件已加载但参数仍为默认宽松值(比如 validate_password.length = 8,validate_password.policy = MEDIUM),而新用户习惯性用简单密码,触发拦截。
实操要点:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'validate_password'; —— 若返回 DISABLED 或空行,需先安装INSTALL PLUGIN validate_password SONAME 'validate_password.so';
SET GLOBAL 只影响当前实例生命周期,MySQL 8.4 强烈推荐用 SET PERSIST 将变量写入 mysqld-auto.cnf(位于数据目录下),否则服务重启后策略失效,容易引发线上密码变更失败。
常用策略参数示例(执行前确保插件已安装):
SET PERSIST validate_password.length = 12;SET PERSIST validate_password.policy = STRONG;SET PERSIST validate_password.mixed_case_count = 2;SET PERSIST validate_password.number_count = 2;SET PERSIST validate_password.special_char_count = 2;
注意:policy = STRONG 会强制启用所有子规则(大小写、数字、特殊字符),但 validate_password.dictionary_file 默认为空,不校验字典词 —— 如需禁用常见弱口令,得手动指定词库路径并加载
错误信息本身不提示具体哪条规则没满足,得反向比对当前策略参数和你输入的密码:
SHOW VARIABLES LIKE 'validate_password%'; 查所有生效值validate_password.length?含至少 validate_password.mixed_case_count 个大写字母?小写字母数是否单独计数?(是的,mixed_case_count 指大小写总出现次数,不是“大小写各几个”)!, @, #, $),空格、中文、emoji 不算CREATE USER 或 SET PASSWORD,同样受校验;但 GRANT ... IDENTIFIED BY 在 8.4 中已被弃用,会直接报错MySQL 升级本身不重置密码策略,但如果你在旧版本没装过 validate_password,升级后首次运行 INSTALL PLUGIN,所有变量会按 8.4 默认值初始化(比如 policy = MEDIUM),而旧账号密码可能只满足 LOW 级别要求 —— 这时改密操作就会失败。
临时绕过方法(仅限紧急修复):
SYSTEM_USER 权限的账号执行:SET SESSION validate_password.policy = LOW;,再改密UNINSTALL PLUGIN validate_password;(不推荐长期使用)SHOW VARIABLES LIKE 'validate_password%' 结果,升级后用 SET PERSIST 恢复原有策略插件变量名区分大小写,validate_password.Policy 无效,必须全小写;另外 validate_password.check_user_name 默认开启,意味着密码不能包含用户名(哪怕子串),这点常被忽略。
Tplink企业版路由器WiFi名称的默认设置介绍(Tplink企业版路由器WiFi名称的默认设置是什么)
Tplink路由器灯常亮无法上网的原因分析(如何解决Tplink路由器灯常亮无法上网的问题)
Tplink千兆企业级路由器自动重启的作用和优势介绍(如何设置Tplink千兆企业级路由器自动重启功能)
一根天线的tplink路由器有哪些(一根天线的Tplink路由器的特点和优势介绍)
tplink路由器外网访问不了nas(Tplink路由器外网访问NAS的原因分析)
Tplink无法搜到路由器的原因分析(如何解决Tplink无法搜到路由器的问题)