MySQL 8.0需先安装validate_password组件才能启用密码策略,执行INSTALL COMPONENT ‘file://component_validate_password’并设policy=MEDIUM及以上,再配置length≥12、mixed_case_count=1等参数以满足等保三级要求。

MySQL 8.0 默认不启用密码复杂度检查,直接改 validate_password.length 等变量是无效的——必须先安装并激活 validate_password 组件,否则所有策略参数都只是摆设。
确认并安装 validate_password 组件
MySQL 8.0 将密码验证功能内置为服务器组件(非传统插件),INSTALL PLUGIN 命令在 8.0+ 已不适用,错误使用会报 ERROR 1126 (HY000)。
- 检查是否已加载:
SELECT * FROM mysql.component WHERE component_name = 'validate_password'; - 未安装则执行:
INSTALL COMPONENT 'file://component_validate_password'; - 安装后立即生效,无需重启,但若要持久化,需在
my.cnf中添加:[mysqld]段下写入validate_password=FORCE_PLUS_PERMANENT
设置符合等保三级的策略参数
等保三级明确要求:密码长度 ≥8 位,且须含数字、大小写字母、特殊字符。仅设 validate_password.length=8 远不够——policy 必须为 MEDIUM 或更高,否则 mixed_case_count 等参数不生效。
-
SET GLOBAL validate_password.policy = 'MEDIUM';(STRONG更推荐,但需额外配置字典文件) -
SET GLOBAL validate_password.length = 12;(高于等保最低要求,规避弱口令风险) -
SET GLOBAL validate_password.mixed_case_count = 1;(大小写总和,非各自 1) SET GLOBAL validate_password.number_count = 1;SET GLOBAL validate_password.special_char_count = 1;
注意:validate_password.mixed_case_count 是大小写字母总数(如 Ab1! 满足),不是“至少一个大写 + 至少一个小写”;若业务真需强制区分,得靠应用层校验或自定义字典。
避免 ALTER USER 报错:ERROR 1820
启用策略后,已有用户若密码不符合新规则,后续执行任何语句(如 SELECT)都会触发 ERROR 1820 (HY000): You must reset your password using ALTER USER...。这不是 bug,而是策略强制生效的表现。
- 对现有用户,必须用
ALTER USER 'user'@'host' IDENTIFIED BY 'NewPass@123';重置密码 - 不能跳过——即使你用
SET PASSWORD或直接更新mysql.user表,也会被拦截 - 批量处理前,先用
SELECT user, host FROM mysql.user WHERE authentication_string = '' OR LENGTH(authentication_string) 找出弱密码账户
配置文件中持久化与常见陷阱
仅用 SET GLOBAL 是临时的,MySQL 重启后失效。必须写入 my.cnf 才能保障合规连续性,但这里有两个坑:
-
plugin-load-add在 8.0+ 已废弃,写它会导致启动失败;正确写法是validate_password=FORCE_PLUS_PERMANENT - 所有
validate_password.*参数必须放在[mysqld]段下,且值不能带引号(如validate_password.policy=MEDIUM,不是'MEDIUM') - 修改配置后必须重启 MySQL,且重启前建议先在测试库验证策略是否按预期拦截弱密码(例如尝试
CREATE USER 'test'@'%' IDENTIFIED BY '123456';)
真正容易被忽略的是:策略生效后,不仅影响新建用户,更会“回溯”约束已有账户的密码修改行为——很多 DBA 只测了 CREATE USER,却没验证 ALTER USER 场景,结果上线当天应用连接批量失败。
文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/jiquanzatan/127133.html