MYSQL 账户安全策略(过期、validate_password)

353 阅读3分钟

TLDR - 写在前面

等保要求中,身份鉴别要求应对登录用户进行身份标识和鉴别,身份鉴别信息具有复杂度要求并定期更换。可通过如下两点实现:

  1. 通过validate插件来控制密码强度策略,插件运行时可安装并生效;
  2. 通过变更用户password_lifetime属性进行密码有效期控制;

一. validate插件

1.安装

可通过三种方式进行安装

  1. 运行时命令
  2. 配置文件
  3. 启动命令

这里先演示1,最后结尾给出2配置。

运行时install

  1. root 登录Mysql
$ mysql -u root -p
  1. 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)
  1. 查看是否成功 如有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)
  1. 配置密码强度策略

通过改变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;
  1. 测试
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