MySQL 5.7 为了增加系统安全性, 加入了 validate_password plugin, 可以自定 MySQL 使用者帐号密码的强度, 当建立 MySQL 帐号或者修改密码时, 密码强度不符合要求, 会出现以下错误:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements.
解决方法是设定一组比较复杂的密码, 以符合 MySQL 的要求, 如果要检视目前的密码要求, 或者修改这个限制, 需要登入 MySQL:
$ mysql -u roor -p
登入后执行以下指令可以检视密码的长度要求:
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 |
+--------------------------------------+--------+
7 rows in set (0.01 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
SHOWVARIABLESLIKE'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|
+--------------------------------------+--------+
7rowsinset(0.01sec)
可以看到密码长度 (validate_password_length) 要求 8 个字符, 而密码强度 (validate_password_policy) 要求默认是 MEDIUM.
设定密码强度的 validate_password_policy, 分别有以下选项:
0 或 Low: 只会测试密码长度.
1 或 MEDIUM: 密码必需包括英文字母, 数字及特别字符.
2 或 STRONG: 密码必需包括英文字母, 数字及特别字符, 另外密码不能与字典档的字词匹配.
要求改这个限制, 可以修改 MySQL 的环境变量, 例如我将密码长度改为 6 位, 而密码强度改为 LOW, 可以执行以下指令:
set global validate_password_length=6;
Query OK, 0 rows affected (0.02 sec)
SET GLOBAL validate_password_policy=LOW;
Query OK, 0 rows affected (0.01 sec)
1
2
3
4
5
setglobalvalidate_password_length=6;
QueryOK,0rowsaffected(0.02sec)
SETGLOBALvalidate_password_policy=LOW;
QueryOK,0rowsaffected(0.01sec)
上面的修改会立即生效, 但下次启动 MySQL 后便会失效, 要下次启动 MySQL 仍然生效, 需要开启 my.cnf 设定:
$ sudo vi /etc/my.cnf
在 [mysqld] 段落加入 validate_password_length 及 validate_password_policy 的设定, 改成这样:
[mysqld]
validate_password_length=6
validate_password_policy=LOW
1
2
3
[mysqld]
validate_password_length=6
validate_password_policy=LOW
储存盘案后, 下次启动 MySQL 便会使用新定义的密码规则。
你可能感兴趣的内容: