MySQL密码强度校验插件
1.介绍
在MySQL中,可以通过开启validate_password插件来进行密码强度校验。这个插件可以确保用户设置的密码强度满足一定的要求,提高数据
库的安全性
2.流程图
3.默认开启情况
- MySQL5.7:插件已经安装但未启用
- MySQL8:安装并启用
4.检查是否安装
# 查看插件
show plugins;
# 查看validate_password的插件信息
show variables like 'validate_password%';
5.启用
启用方式
- 在参数文件my.cnf中添加参数(需重启,永久生效)
- 运行时命令安装(不需要重启,永久生效)
在参数文件my.cnf中添加参数
# 注意
# plugin library中的validate_password文件名的后缀名根据平台不同有所差异。 对于Unix和Unix-like系统而言,它的文件后缀名是.so,对于Windows系统而言,它的文件后缀名是.dll
# 参数FORCE_PLUS_PERMANENT是为了防止插件在MySQL运行时的时候被卸载。当你卸载插件时就会报错
[mysqld]
plugin-load-add=validate_password.so
\#ON/OFF/FORCE/FORCE_PLUS_PERMANENT: 是否使用该插件(及强制/永久强制使用)
validate-password=FORCE_PLUS_PERMANENT
运行时命令安装
此方法也会注册到元数据,也就是mysql.plugin表中,所以不用担心MySQL重启后插件会失效
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
6.设置密码安全策略
设置方式
- 配置文件
- 命令
配置文件
打开my.cnf找到[mysqld]部分,其中添加以下配置:
validate_password.policy=LOW
validate_password.length=8
validate_password.number_count=1
validate_password.special_char_count=1
命令
SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password_policy=MEDIUM;
SET GLOBAL validate_password_policy=STRONG;
SET GLOBAL validate_password_policy=0; # For LOW
SET GLOBAL validate_password_policy=1; # For MEDIUM
SET GLOBAL validate_password_policy=2; # For HIGH
set global validate_password_length=1;
修改密码
如果不满足密码安全策略就会失败
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';
7.关于validate_password组件对应的系统变量说明
说明
选项 | 默认值 | 参数描述 |
---|---|---|
validate_password_check_user_name | ON | 设置为ON的时候表示能将密码设置成当前用户名 |
validate_password_dictionary_file | 用于检查密码的字典文件的路径名,默认为空 | |
validate_password_length | 8 | 密码的最小长度,也就是说密码长度必须大于或等于8 |
validate_password_mixed_case_count | 1 | 如果密码策略是中等或更强的,validate_password要求密码具有的小写和大写字符的最小数量。对于给定的这个值密码必须有那么多小写字符和那么多大写字符 |
validate_password_number_count | 1 | 密码必须包含的数字个数 |
validate_password_policy | MEDIUM | 密码强度检验等级,可以使用数值0、1、2或相应的符号值LOW、MEDIUM、STRONG来指定,0:只检查长度,1:检查长度、数字、大小写、特殊字符,2:检查长度、数字、大小写、特殊字符、字典文件 |
validate_password_special_char_count | 1 | 密码必须包含的特殊字符个数 |
提示
组件和插件的默认值可能有所不同。例如,MySQL 5.7. validate_password_check_user_name的默认值为OFF
8.卸载插件、组件
# 卸载插件
UNINSTALL PLUGIN validate_password;
# 卸载组件
UNINSTALL COMPONENT 'file://component_validate_password';