使用MySQL密码插件杜绝账户弱口令

从MySQL 5.6.6版本起,提供了密码插件(validate_password )用于检查密码强度提高安全性。在数据库中安装并启用密码插件后,在create user、alter user(5.7版本)、grant、set password操作时会验证密码是否符合预设的密码策略。
密码插件提供三种级别的验证标准,由参数validate_password_policy 控制
1。 LOW:只验证密码长度,不得少于8位
2。 MEDIUM :除验证长度外,还需满足至少包含1个数字、1个小写字母、1个大写字母和一个特殊符号
3。 STRONG:除以上所有规则外,新设密码不能包含密码文件中的字词

一、使用密码插件
在5.6、5.7、8.0版本中加载密码插件的方法都一样。
1。确保密码插件的so文件在插件目录中,通常为MySQL安装目录下的lib/plugin下。
2。 加载密码插件
方法一:写入配置文件,重启MySQL实例
[mysqld]plugin-load=validate_password.so
方法二:在实例运行中使用install plugin命令加载插件
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

二、验证插件加载情况
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS
    -> WHERE PLUGIN_NAME LIKE 'validate%';
+-------------------+--------------------+
| PLUGIN_NAME       | PLUGIN_STATUS      |
+-------------------+--------------------+
| validate_password | ACTIVE             |
+-------------------+--------------------+
1 row in set (0.00 sec)

三、查看默认密码策略
默认的密码强度级别是中等( MEDIUM),即密码不能少于8位,且要包含数字、大小写字母、特殊符号至少各一个:
mysql> show variables like '%validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |             #设为 ON 时密码中不允许包含用户名
| validate_password_dictionary_file    |        |             #用于密码验证的字典文件路径,仅在密码验证级别为STRONG时生效
| validate_password_length             | 8      |             #限制密码最短长度不得少于8位
| validate_password_mixed_case_count   | 1      |             #密码中大小写字母的最少个数
| validate_password_number_count       | 1      |             #密码中数字的最少个数
| validate_password_policy             | MEDIUM |             #设置密码验证级别
| validate_password_special_char_count | 1      |             #密码中特殊符号的最少个数
+--------------------------------------+--------+

四、测试密码插件的效果
在新设置不符合密码策略规则的密码时会报错,提示不满足密码策略要求:
mysql> create user hy@'192.168.1.%' identified by 'xxxxxx123';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

设置符合策略的复杂密码后可以成功执行:
mysql> create user hy@'192.168.1.%' identified by '1qaz@WSX';
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host,authentication_string from mysql.user;
+-----------+-------------+-----------------------------------------------------------+
| user      | host        | authentication_string                                     |
+-----------+-------------+-----------------------------------------------------------+
| root      | localhost   | *6AF239DABA5FB2A794AFA158646426FC1E9A5742                 |
| mysql.sys | localhost   | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE                 |
| hy        | 192.168.1.% | *58319282EAB9E38D49CA25844B73DA62C80C2ABC                 |
+-----------+-------------+-----------------------------------------------------------+




你可能感兴趣的:(MySQL,弱口令,MySQL)