新的mysql對於密碼設定多了更多的參數,預設也把原來的規則改得更嚴格,例如要8個字元、至少一個數字、一個英文字母和一個特殊符號。如果不符合規則的情況會報錯:
ERROR 1819 (HY000) Your password does not satisfy the current policy requirements
我覺得這樣很煩,想要改規則。
OS及作業系統版本
FreeBSD ddnss 11.2-RELEASE-p10
mysql Ver 8.0.16 for FreeBSD11.2 on amd64 (Source distribution)
查看現有參數
進到MYSQL的SHELL中下指令
> show variables like '%password%';
+----------------------------------------------+-----------------+
| Variable_name | Value |
+----------------------------------------------+-----------------+
| caching_sha2_password_auto_generate_rsa_keys | ON |
| caching_sha2_password_private_key_path | private_key.pem |
| caching_sha2_password_public_key_path | public_key.pem |
| default_password_lifetime | 0 |
| disconnect_on_expired_password | ON |
| mysql_native_password_proxy_users | OFF |
| password_history | 0 |
| password_require_current | OFF |
| password_reuse_interval | 0 |
| report_password | |
| sha256_password_auto_generate_rsa_keys | ON |
| sha256_password_private_key_path | private_key.pem |
| sha256_password_proxy_users | OFF |
| sha256_password_public_key_path | public_key.pem |
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 | <== 8個字元
| validate_password.mixed_case_count | 1 | <== 大小寫字元數
| validate_password.number_count | 1 | <== 數字數
| validate_password.policy | MEDIUM | <== 強度政策
| validate_password.special_char_count | 1 | <== 特殊字元數
+----------------------------------------------+-----------------+
21 rows in set (0.00 sec)
其中的強度政策牽涉到會檢查的項目,有三種政策:
0 /LOW 只檢查長度
1 /MEDIUM 檢查長度、英文、數字、特殊字元要照表操課
2 /STRONG 除了上面以外,還要檢查是否是字典檔的字
修改規則
基本上只要修改最小長度為4,還有把政策調整為LOW即可,長度的最小值是4,設比4小的話還是會是4。
強度政策調低後,其他的項目可以不必理會
> set global validate_password.length=4;
> set global validate_password.special_char_count =0;
調整後規則
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | LOW |
| validate_password.special_char_count | 0 |
測試
直接修改密碼試試。
Mysql 8修改密碼的方式有變更,原本的password 函數作廢。
要用 alter user 的方法來改
Database changed
> ALTER USER 'axer'@'localhost' identified BY '123456';
Query OK, 0 rows affected (0.01 sec) <== 成功
參考資料
[1] Alvin's Blog 部落格
[2] http://www-creators.com/archives/5574
[3] https://www.opencli.com/mysql/mysql-change-user-password