最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
MySQL 8.4如何配置密码验证组件
时间:2026-08-31 08:39:47 编辑:袖梨 来源:一聚教程网
MySQL 8.4 默认不激活 validate_password,需先 INSTALL PLUGIN 加载,再用 SET PERSIST 持久化配置 length、policy 等参数,否则重启失效;策略仅对新建/修改密码生效,且变量名全小写、区分大小写。
MySQL 8.4 默认已启用 validate_password,但需手动配置策略参数
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'; - 插件加载后,参数全部通过系统变量控制,**不写入 my.cnf 的 [mysqld] 段落也能生效**,但重启后会丢失 —— 所以必须持久化
设置密码策略必须用 SET PERSIST,不能只用 SET GLOBAL
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 默认为空,不校验字典词 —— 如需禁用常见弱口令,得手动指定词库路径并加载
STRONG 策略下 ALTER USER 报错 “Failed password validation” 怎么查原因
错误信息本身不提示具体哪条规则没满足,得反向比对当前策略参数和你输入的密码:
- 用
SHOW VARIABLES LIKE 'validate_password%';查所有生效值 - 逐条验证:密码长度 ≥
validate_password.length?含至少validate_password.mixed_case_count个大写字母?小写字母数是否单独计数?(是的,mixed_case_count指大小写总出现次数,不是“大小写各几个”) - 特殊字符指 ASCII 33–47、58–64、91–96、123–126 范围内的字符(如
!,@,#,$),空格、中文、emoji 不算 - 若用
CREATE USER或SET PASSWORD,同样受校验;但GRANT ... IDENTIFIED BY在 8.4 中已被弃用,会直接报错
升级到 8.4 后旧账号密码被拒绝,不是 bug 是策略继承问题
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 TLWDR7500 无线路由器WDS桥接设置 08-31
- .net 3.5离线安装包 sources\sxs安装与报错处理 08-31
- php是什么 有什么用途和如何学 08-31
- 狗狗名字女孩12个推荐:甜美温柔又好叫 08-31
- TPLink TLWDR7800 无线路由器网速限制 08-31
- 安卓java模拟器下载按文件类型选工具与导入排错 08-31