MySQL5.7版本加入了密码安全策略机制,修改用户的密码必须符合安全策略的规则,否则无法修改。这对于本地开发来说,有点不方便,密码太长容易忘记,我本地的MySQL密码一般都是123456,这样就不会忘记了,下面我们通过修改MySQL的安全策略来修改用户的密码长度。
查看现有的密码策略1
2
3
4
5
6
7
8
9
10
11
12mysql> 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 |
+--------------------------------------+--------+
参数解释:
1).validate_password_dictionary_file 指定密码验证的文件路径;
2).validate_password_length 密码最小长度
3).validate_password_mixed_case_count 密码至少要包含的小写字母个数和大写字母个数;
4).validate_password_number_count 密码至少要包含的数字个数
5).validate_password_policy 密码强度检查等级,对应等级为:0/LOW、1/MEDIUM、2/STRONG,默认为1
注意:
0/LOW:只检查长度;
1/MEDIUM:检查长度、数字、大小写、特殊字符;
2/STRONG:检查长度、数字、大小写、特殊字符字典文件。
6).validate_password_special_char_count密码至少要包含的特殊字符数
修改用户密码
可以看到,现在MySQL的安全策略的等级是MEDIUM,也就是密码需要:数字、字母大小写、特殊字符这三种组合,并且不能少于8位。比如我现在想把root密码改为123456,是改不了的
1
2mysql> set password for 'root'@'localhost'=password('123456');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
MySQL直接报错,因为密码不符合安全策略的规则。所以我们需要通过修改安全策略规则来实现目的
1
2
3
4
5mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=6;
Query OK, 0 rows affected (0.00 sec)
把MySQL的安全策略等级降为0,验证密码的长度改为6,我们再看一下现在的安全策略:
1
2
3
4
5
6
7
8
9
10
11
12
13mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 6 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
可以看到,MySQL的安全策略已经符合我们的要求了,现在可以愉快的修改你密码了
1
2mysql> set password for 'root'@'localhost'=password('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)
已经不报错了,大功告成!!
注意:这里只能用于本地环境操作,切勿用于生产环境