在MySQL数据库的使用场景中,弱密码很容易成为数据库被攻击的突破口,设置密码复杂度策略可以有效降低这类风险。MySQL本身提供了validate_password插件,专门用于校验用户密码的复杂度,我们可以通过安装该插件来开启相关功能。

一、检查validate_password插件状态
在安装插件之前,我们可以先查看当前MySQL是否已经加载了该插件,执行以下SQL语句:
-- 查看已安装的插件,筛选validate_password相关 SHOW PLUGINS LIKE 'validate_password%';
如果查询结果中没有对应的插件记录,说明当前还未安装该插件,需要进行后续安装操作。
二、安装validate_password插件
MySQL安装插件的方式很简单,执行以下SQL语句即可完成安装:
-- 安装validate_password插件 INSTALL PLUGIN validate_password SONAME 'validate_password.so';
安装完成后,再次执行上面的查询插件语句,就可以看到validate_password插件的状态为ACTIVE,说明插件已经成功加载。如果是Windows系统的MySQL,插件文件名后缀为dll,语句需要调整为:
INSTALL PLUGIN validate_password SONAME 'validate_password.dll';
三、配置密码复杂度策略参数
插件安装完成后,我们可以通过修改系统变量来设置具体的密码复杂度规则,常用的参数如下:
| 参数名 | 默认值 | 说明 |
|---|---|---|
| validate_password.length | 8 | 密码的最小长度 |
| validate_password.policy | MEDIUM | 密码强度策略,可选LOW、MEDIUM、STRONG |
| validate_password.number_count | 1 | 密码中至少需要包含的数字个数 |
| validate_password.special_char_count | 1 | 密码中至少需要包含的特殊字符个数 |
| validate_password.mixed_case_count | 1 | 密码中至少需要包含的大小写字母个数 |
我们可以通过SET GLOBAL语句来修改这些参数,比如设置密码最小长度为10,策略为MEDIUM:
-- 设置密码最小长度为10 SET GLOBAL validate_password.length = 10; -- 设置密码策略为MEDIUM SET GLOBAL validate_password.policy = MEDIUM;
如果需要让配置永久生效,需要将这些参数写入MySQL的配置文件my.cnf或者my.ini中,在[mysqld]区块下添加:
[mysqld] validate_password.length=10 validate_password.policy=MEDIUM validate_password.number_count=1 validate_password.special_char_count=1 validate_password.mixed_case_count=1
四、策略规则说明
不同的validate_password.policy值对应不同的校验规则:
- LOW:只校验密码长度,满足
validate_password.length设置的长度即可 - MEDIUM:除了长度,还需要满足数字、大小写字母、特殊字符的要求,对应上面四个计数参数
- STRONG:在MEDIUM的基础上,还会校验密码是否匹配字典文件中的弱密码,需要额外设置
validate_password.dictionary_file参数指定字典文件路径
五、验证密码复杂度策略
配置完成后,我们可以尝试设置一个不符合要求的密码,查看是否会报错:
-- 尝试设置简单密码,预期会报错 ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
此时会返回错误提示,说明密码不符合复杂度要求。我们设置一个符合要求的密码:
-- 设置符合复杂度要求的密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'Test@12345';
如果语句执行成功,说明密码复杂度策略已经生效。
六、卸载validate_password插件
如果后续不需要使用该插件,可以执行以下语句卸载:
-- 卸载validate_password插件 UNINSTALL PLUGIN validate_password;
卸载后,密码复杂度校验功能会关闭,设置密码时不再有复杂度限制。
MySQLvalidate_password密码复杂度策略数据库安全修改时间:2026-07-10 07:39:22