MySQL 5.7 為了增加系統安全性, 加入了 validate_password plugin, 可以自定 MySQL 使用者帳號密碼的強度, 當建立 MySQL 帳號或者修改密碼時, 密碼強度不符合要求, 會出現以下錯誤:

  1. Your password does not satisfy the current policy requirements

image.png
image.png

  1. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements.

解決方法是設定一組比較複雜的密碼, 以符合 MySQL 的要求, 如果要檢視目前的密碼要求, 或者修改這個限制, 需要登入 MySQL:

mysql -u roor -p

登入後執行以下指令可以檢視密碼的長度要求:

mysql>SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-----------------+
| Variable_name                        | Value           |
+--------------------------------------+-----------------+
| validate_password.check_user_name    | ON              |
| 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], 耗时: [63ms]

可以看到密碼長度 (validate_password_length) 要求 8 個字符, 而密碼強度 (validate_password_policy) 要求預設是 MEDIUM.

設定密碼強度的 validate_password_policy, 分別有以下選項:

  • 0 或 Low: 只會验证密碼長度.
  • 1 或 MEDIUM: 密碼必需包括英文字母, 數字及特別字元.
  • 2 或 STRONG: 密碼必需包括英文字母, 數字及特別字元, 另外密碼不能與字典檔的字詞匹配.

要求改這個限制, 可以修改 MySQL 的環境變數, 例如我將密碼長度改為 6 位, 而密碼強度改為 LOW, 可以執行以下指令:

mysql>SET GLOBAL validate_password.length=6;
SET GLOBAL validate_password.policy=LOW;
- - -共(1)条语句执行- - -

[语句1]:
SET GLOBAL validate_password.length=6
[Success] ,耗时:31(ms)
影响行数:0

执行结束,成功执行(1)条!
- - -共(1)条语句执行- - -

[语句1]:
SET GLOBAL validate_password.policy=LOW
[Success] ,耗时:30(ms)
影响行数:0

执行结束,成功执行(1)条!
mysql>SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-----------------+
| Variable_name                        | Value           |
+--------------------------------------+-----------------+
| validate_password.check_user_name    | ON              |
| 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], 耗时: [65ms]

上面的修改會立即生效, 但下次啟動 MySQL 後便會失效, 要下次啟動 MySQL 仍然生效, 需要開啟 my.cnf 設定:

$ sudo vi /etc/my.cnf

在 [mysqld] 段落加入 validate_password.lengthvalidate_password.policy 的設定, 改成這樣:
D:\Tools\MYSQL\mysql8-latest\my.ini

[mysqld]
validate_password.length=6
validate_password.policy=LOW

image.png
儲存檔案後, 下次啟動 MySQL 便會使用新定義的密碼規則。

原文链接

https://www.ltsplus.com/mysql/fix-mysql-error-1819