MySQL需手动启用validate_password插件并配置系统变量以强制密码复杂度。先检查安装状态,未激活则INSTALL PLUGIN加载;再通过SET GLOBAL设置policy、length等参数控制强度,或写入my.cnf永久生效;新用户创建或改密时自动校验,可用VALIDATE_PASSWORD_STRENGTH函数测试强度分值。

MySQL 默认不强制密码复杂度,需手动启用并配置验证插件。核心是加载 validate_password 插件,并设置对应系统变量。
确认并加载 validate_password 插件
该插件是 MySQL 官方提供的密码强度校验模块,5.7 及以上版本自带(8.0 默认启用)。先检查是否已安装:
- 登录 MySQL 后执行:
SHOW PLUGINS;,查找validate_password行 - 若未激活,运行:
INSTALL PLUGIN validate_password SONAME 'validate_password.so';(Linux)或'validate_password.dll'(Windows) - 验证是否生效:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'validate_password';,状态应为ACTIVE
配置密码复杂度规则
通过修改全局系统变量控制策略强度,常用参数包括:
-
validate_password.policy:策略等级(0=LOW,1=MEDIUM,2=STRONG),建议设为 1 或 2 -
validate_password.length:最小长度(默认 8,建议 ≥12) -
validate_password.mixed_case_count:至少包含大写+小写字母的个数(如设为 1,表示必须含至少 1 个大写和 1 个小写) -
validate_password.number_count:至少包含数字的个数(建议 ≥1) -
validate_password.special_char_count:至少包含特殊字符的个数(如!@#$%等,建议 ≥1)
设置示例(临时生效):
SET GLOBAL validate_password.policy = 2;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;
如需永久生效,将上述变量写入 my.cnf(Linux)或 my.ini(Windows)的 [mysqld] 段下,然后重启 MySQL 服务。
验证策略是否起作用
新建用户或修改密码时会自动校验。例如执行:CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'abc123';
若密码太弱(如无大写、无特殊符、长度不足),会报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。
也可用内置函数测试:SELECT VALIDATE_PASSWORD_STRENGTH('MyPass123!'); 返回 0–100 的强度分值。
注意事项与兼容性
MySQL 8.0 中插件名改为 validate_password(旧版 5.7 也支持),但部分云数据库(如阿里云 RDS、腾讯云 CDB)可能禁用该插件或限制参数修改,需查阅对应平台文档。
策略仅影响新设/修改的密码,不会强制已有用户改密;若需批量加固,需结合 ALTER USER ... IDENTIFIED BY 逐个更新。
避免将策略设得过于严苛(如要求 4 类字符+长度 20),以免运维操作受阻或引发应用连接失败。










