MySQL 5.7 為了增加系統安全性, 加入了 validate_password plugin, 可以自定 MySQL 使用者帳號密碼的強度, 當建立 MySQL 帳號或者修改密碼時, 密碼強度不符合要求, 會出現以下錯誤:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements.
解決方法是設定一組比較複雜的密碼, 以符合 MySQL 的要求, 如果要檢視目前的密碼要求, 或者修改這個限制, 需要登入 MySQL:
登入後執行以下指令可以檢視密碼的長度要求:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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) |
可以看到密碼長度 (validate_password_length) 要求 8 個字元, 而密碼強度 (validate_password_policy) 要求預設是 MEDIUM.
設定密碼強度的 validate_password_policy, 分別有以下選項:
0 或 Low: 只會測試密碼長度.
1 或 MEDIUM: 密碼必需包括英文字母, 數字及特別字元.
2 或 STRONG: 密碼必需包括英文字母, 數字及特別字元, 另外密碼不能與字典檔的字詞匹配.
要求改這個限制, 可以修改 MySQL 的環境變數, 例如我將密碼長度改為 6 位, 而密碼強度改為 LOW, 可以執行以下指令:
1 2 3 4 5 |
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) |
上面的修改會立即生效, 但下次啟動 MySQL 後便會失效, 要下次啟動 MySQL 仍然生效, 需要開啟 my.cnf 設定:
在 [mysqld] 段落加入 validate_password_length 及 validate_password_policy 的設定, 改成這樣:
1 2 3 |
[mysqld] validate_password_length=6 validate_password_policy=LOW |
儲存檔案後, 下次啟動 MySQL 便會使用新定義的密碼規則。