密码复杂度校验
MySQL5.6.6
版本之后增加了密码强度验证插件validate_password
.
-- 查看插件是否安装
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'validate_password';
+-------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------------+---------------+
| validate_password | ACTIVE |
+-------------------+---------------+
1 row in set
-- 如果没有安装
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
-- 卸载
UNINSTALL PLUGIN validate_password;
-- 查看密码校验相关参数
mysql> show variables like '%validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
参数名 | 说明 |
---|---|
validate_password_check_user_name |
用户名检测,设置为ON的时候表示能将密码设置成当前用户名 |
validate_password_dictionary_file |
字典文件 |
validate_password_length |
密码的长度要求 |
validate_password_mixed_case_count |
密码中至少有1个大写小字母 |
validate_password_number_count |
密码中至少1个数字 |
validate_password_policy |
密码的安全策略,参数可选值:MEDIUM 、LOW 、STRONG . LOW :策略仅测试密码长度。MEDIUM :策略添加了密码必须至少包含数字、大小写和特殊字符的条件。STRONG :策略除了MEDIUM 外,还不能匹配字典文件中的字词. |
validate_password_special_char_count |
密码中至少1个特殊字符 |
-- 密码规范测试,评分达到100才能使用
select VALIDATE_PASSWORD_STRENGTH('123456');
-- 另一种方法测试
mysql> select password('1234');
mysql> select password('1234#Qsss');
+-------------------------------------------+
| password('1234#Qsss') |
+-------------------------------------------+
| *F7BE83BBADD1FA159B1028170433FE7CBA5C0D01 |
+-------------------------------------------+
1 row in set
字典文件的使用:
- 设置策略为
STRONG
set global validate_password_policy=STRONG;
- 创建字典文件
[root@ ~]# cat /tmp/validate_password_dictionary_file
admin
root
love
password
- 配置字典文件路径
-- 配置
mysql> set global validate_password_dictionary_file="/tmp/validate_password_dictionary_file";
Query OK, 0 rows affected (0.00 sec)
-- 查看
mysql> SHOW STATUS LIKE 'validate%';
在
MySQL 5.7.8
之前,服务器运行时对字典文件的更改需要重新启动才能使服务器识别更改; 而在5.7.9
后可动态设置并生效
密码过期
[mysqld]
# 设置默认过期时间,单位天,默认永不过期0
default_password_lifetime=90
# 默认ON,密码过期会断开连接
disconnect_on_expired_password=ON
-- 运行时修改, 重启失效
SET GLOBAL default_password_lifetime = 90;
-- 针对特定用户设置过期策略
ALTER USER 'user'@'localhost' PASSWORD EXPIRE;
ALTER USER 'user'@'localhost' PASSWORD EXPIRE INTERVAL 30 DAY;
ALTER USER 'user'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'user'@'localhost' PASSWORD EXPIRE DEFAULT;
账户锁定
-- 5.7.8版本之后,新增锁定账户功能
CREATE USER 'furrywall'@'localhost' IDENTIFIED BY '71m32ch4n6317' ACCOUNT LOCK;
ALTER USER 'furrywall'@'localhost' ACCOUNT LOCK;
ALTER USER 'furrywall'@'localhost' ACCOUNT UNLOCK;