由于近期负责项目等报二级,涉及到“建议数据库设置密码复杂度和定期更换用户口令”这一项,在这里分享一下官方文档。
1.密码验证插件安装
要使服务器可以使用,插件库文件必须位于MySQL插件目录(plugin_dir
系统变量指定的目录)中。如有必要,请设置plugin_dir
服务器启动时的值, 以告知服务器插件目录位置。
插件库文件基本名称是 validate_password
。文件名后缀因平台.so
而异(例如,对于Unix和类Unix系统,.dll
对于Windows)。
要在服务器启动时加载插件,请使用该 --plugin-load-add
选项命名包含它的库文件。使用此插件加载方法,每次服务器启动时都必须提供该选项。例如,将这些行放在服务器my.cnf
文件中(.so
根据需要调整平台的 后缀):
[mysqld]
plugin-load-add=validate_password.so
修改后my.cnf
,重新启动服务器以使新设置生效。
或者,要在运行时注册插件,请使用此语句(.so
根据需要调整后缀):
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
INSTALL PLUGIN
加载插件,并将其注册到mysql.plugins
系统表中,以便为每个后续的正常服务器启动加载插件。
要验证插件安装,请检查 INFORMATION_SCHEMA.PLUGINS
表或使用该SHOW PLUGINS
语句
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE 'validate%';
+-------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------------+---------------+
| validate_password | ACTIVE |
+-------------------+---------------+
如果插件无法初始化,请检查服务器错误日志以获取诊断消息。
如果插件先前已注册 INSTALL PLUGIN
或已加载 --plugin-load-add
,您可以使用--validate-password
服务器启动时的选项来控制插件激活。例如,要在启动时加载插件并防止在运行时删除它,请使用以下选项:
[mysqld]
plugin-load-add=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
1) 先查看mysql全局参数配置
该问题其实与mysql的validate_password_policy的值有关。
查看一下msyql密码相关的几个全局参数:
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM |
+----------------------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| 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 |
+--------------------------------------+--------+
6 rows in set (0.08 sec)
2)参数解释
validate_password_dictionary_file
插件用于验证密码强度的字典文件路径。
validate_password_length
密码最小长度,参数默认为8,它有最小值的限制,最小值为:validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)
validate_password_mixed_case_count
密码至少要包含的小写字母个数和大写字母个数。
validate_password_number_count
密码至少要包含的数字个数。
validate_password_policy
密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG。有以下取值:
Policy Tests Performed
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file
默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
validate_password_special_char_count
密码至少要包含的特殊字符数。
3)修改mysql参数配置
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)
mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_number_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=4;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file | |
| validate_password_length | 4 |
| validate_password_mixed_case_count | 0 |
| validate_password_number_count | 0 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 0 |
+--------------------------------------+-------+
6 rows in set (0.00 sec)
4)修改简单密码:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');
Query OK, 0 rows affected, 1 warning (0.00 sec)