TLDR - 写在前面
等保要求中,身份鉴别要求应对登录用户进行身份标识和鉴别,身份鉴别信息具有复杂度要求并定期更换。可通过如下两点实现:
- 通过validate插件来控制密码强度策略,插件运行时可安装并生效;
- 通过变更用户password_lifetime属性进行密码有效期控制;
一. validate插件
1.安装
可通过三种方式进行安装
- 运行时命令
- 配置文件
- 启动命令
这里先演示1,最后结尾给出2配置。
运行时install
- root 登录Mysql
$ mysql -u root -p
- install/uninstall
# 通过 INSTALL PLUGIN 命令可安装此插件
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
Query OK, 0 rows affected, 1 warning (0.28 sec)
# 卸载 mysql> UNINSTALL PLUGIN validate_password;
Query OK, 0 rows affected, 1 warning (0.01 sec)
- 查看是否成功 如有validate插件变量注册到全局,则可认为安装成功
# 查看 validate_password 相关参数
mysql> show variables like 'validate%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | ON |
| 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 |
+--------------------------------------+--------+
也可以通过查看INFORMATION_SCHEMA.PLUGINS表中记录验证
mysql> SELECT PLUGIN_NAME, PLUGIN_LIBRARY, PLUGIN_STATUS, LOAD_OPTION FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'validate_password';
+-------------------+----------------------+---------------+-------------+
| PLUGIN_NAME | PLUGIN_LIBRARY | PLUGIN_STATUS | LOAD_OPTION |
+-------------------+----------------------+---------------+-------------+
| validate_password | validate_password.so | ACTIVE | ON |
+-------------------+----------------------+---------------+-------------+
1 row in set (0.00 sec)
- 配置密码强度策略
通过改变validate组件相关参数控制密码强度即可,密码复杂度策略只对生效后的操作有效,比如说你之前有个账号,密码是 123 ,则该账号还是可以继续使用的,不过若再次更改密码则需满足复杂度策略。
1、validate_password_policy:
代表的密码策略,默认是MEDIUM 可配置的值有以下:0 or LOW 仅需需符合密码长度(由参数validate_password_length指定)1 or MEDIUM 满足LOW策略,同时还需满足至少有1个数字,小写字母,大写字母和特殊字符2 or STRONG 满足MEDIUM策略,同时密码不能存在字典文件(dictionary file)中
2、validate_password_dictionary_file
用于配置密码的字典文件,当validate_password_policy设置为STRONG时可以配置密码字典文件,字典文件中存在的密码不得使用。
3、validate_password_length
用来设置密码的最小长度,默认值是8
4、validate_password_mixed_case_count
当validate_password_policy设置为MEDIUM或者STRONG时,密码中至少同时拥有的小写和大写字母的数量,默认是1最小是0;默认是至少拥有一个小写和一个大写字母。
5、validate_password_number_count
当validate_password_policy设置为MEDIUM或者STRONG时,密码中至少拥有的数字的个数,默认1最小是0
6、validate_password_special_char_count
当validate_password_policy设置为MEDIUM或者STRONG时,密码中至少拥有的特殊字符的个数,默认1最小是0
set global validate_password_length = 10;
set global validate_password_special_char_count = 3;
- 测试
alter user 'sys'@'%' identified by '123';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
二、password_lifetime
通过变更password_lifetime 来控制密码过期时间。
1. 全局默认
# 设置全局过期策略 先手动更改再加入配置文件
mysql> SET GLOBAL default_password_lifetime = 90;
Query OK, 0 rows affected (0.01 sec)
mysql> show variables like 'default_password_lifetime';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+ |
default_password_lifetime | 90 |
+---------------------------+-------+
1 row in set (0.00 sec)
# 让此账号使用默认的密码过期全局策略
mysql> ALTER USER 'expuser'@'%' PASSWORD EXPIRE DEFAULT;
Query OK, 0 rows affected (0.01 sec)
2. 变更mysql.user表中user password_lifetime 来控制特定用户
# 使 expuser 账号密码立即过期
mysql> ALTER USER 'expuser'@'%' PASSWORD EXPIRE;
# 修改账号密码永不过期
mysql> ALTER USER 'expuser'@'%' PASSWORD EXPIRE NEVER;
# 单独设置该账号密码90天过期
mysql> ALTER USER 'expuser'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;
三、配置文件
# 若想永久生效,建议将以下参数写入配置文件
[mysqld]
plugin-load = validate_password.so
validate_password_length = 10
validate_password_policy = 1
# 防止插件在MySQL运行时的时候被卸载
validate-password = FORCE_PLUS_PERMANENT
default_password_lifetime = 90