MySQL 8.0+ 必须使用 validate_password 组件(非插件),9.1 起插件彻底弃用;需先验证版本≥8.0、组件已安装且变量返回至少7个,再设 STRONG 策略及 length=12、mixed_case_count=2 等参数,并配置 dictionary_file 路径与权限,最后在 my.cnf 中以点号格式写入并重启生效。

MySQL 8.0+ 必须用 validate_password 组件(不是插件),否则配置无效或报错;MySQL 9.1 起插件已彻底弃用,强行加载 validate_password.so 会失败。
确认 MySQL 版本和组件状态
先验证是否满足前提条件,避免后续所有 SET 操作静默失效:
- 执行
SELECT VERSION();—— 必须 ≥ 8.0,低于此版本不支持组件形式 - 执行
SELECT * FROM mysql.component WHERE component_urn = 'file://component_validate_password';—— 若无结果,说明组件未安装 - 若未安装,运行
INSTALL COMPONENT 'file://component_validate_password';(注意路径是file://开头,不是插件的SONAME) - 安装后立即执行
SHOW VARIABLES LIKE 'validate_password.%';,应返回至少 7 个变量(如validate_password.length、validate_password.policy等),否则组件未生效
设置 STRONG 级别并调整核心参数
validate_password.policy = STRONG 不是“开开关”就完事——它会强制启用所有子规则,但默认值往往不够严(比如 length 默认仍为 8),必须显式覆盖:
🎯 HR面试评价助手(Word版格式) 生成可直接复制到Word文档的标准格式HR面试评价 【使用方式】 1. 发送口令:HR面试评价 2. 粘贴JD文字 3. 上传简历文档 4. 上传面试记录(可选) 5. 复制生成的评价到Word 【输出特点】 - 纯文本格式,可直接粘贴到Word - 层次清晰,标题加粗...
- 执行
SET GLOBAL validate_password.policy = 'STRONG';(值必须加单引号) - 设最小长度:
SET GLOBAL validate_password.length = 12; - 大小写字母各至少 2 位:
SET GLOBAL validate_password.mixed_case_count = 2;(注意:该值表示「大小写字符总数」,非「大写数 + 小写数」,即至少含 2 个大写或 2 个小写即可满足) - 数字至少 2 位:
SET GLOBAL validate_password.number_count = 2; - 特殊字符至少 2 位:
SET GLOBAL validate_password.special_char_count = 2; - 禁用用户名检查(避免误拒合法密码):
SET GLOBAL validate_password.check_user_name = OFF;
加载弱密码字典文件(可选但推荐)
仅靠字符规则防不住 P@ssw0rd2025!! 这类“合规但脆弱”的密码。字典校验需手动准备文件并赋权:
- 创建字典文件,每行一个弱密码(如
/var/lib/mysql/weak_pass.dic),内容示例:password123<br>admin@123<br>1234567890
- 确保 MySQL 进程有读权限:
chown mysql:mysql /var/lib/mysql/weak_pass.dic - 绑定字典:
SET GLOBAL validate_password.dictionary_file = '/var/lib/mysql/weak_pass.dic'; - 注意:路径必须是 MySQL 服务进程能访问的本地绝对路径,不能是客户端路径;若路径错误或权限不足,
SET不报错但字典不生效
让配置永久生效(重启不丢失)
所有 SET GLOBAL 都只在当前会话有效。要持久化,必须改配置文件,且格式与旧插件不同:
- 编辑
my.cnf或my.ini的[mysqld]段落 - 删除旧插件写法(如
validate-password=FORCE_PLUS_PERMANENT),它对组件无效 - 使用点号分隔的变量名,例如:
validate_password.length = 12<br>validate_password.policy = STRONG<br>validate_password.dictionary_file = /var/lib/mysql/weak_pass.dic
- 修改后必须重启 MySQL(组件本身不支持配置文件热加载)
最后提醒一句:VALIDATE_PASSWORD_STRENGTH('your_password') 函数始终可用,建议在批量创建用户前用它预检密码强度——它不依赖组件是否启用,也不触发策略校验,纯计算返回 0–100 分,最不容易被忽略也最实用。


















