MySQL 密碼參數配置與修改 validate_password 該文章匹配解決MySQL Error中的1819問題 場景 通過root用戶創建travel_agency資料庫,目標是,新建一個用戶然後對僅對該用戶開放travel_agency資料庫而非其他資料庫 過程 創建對所有ip開放的用戶 ...
MySQL 密碼參數配置與修改 validate_password
該文章匹配解決MySQL Error中的1819問題
場景
通過root用戶創建travel_agency
資料庫,目標是,新建一個用戶然後對僅對該用戶開放travel_agency
資料庫而非其他資料庫
過程
-
創建對所有ip開放的用戶sx
CEATE USER 'xx'@'%' IDENTIFIED BY 'xx@2';
-
僅對sx用戶開放
travel_agency
資料庫,並刷新許可權使授權生效GRANT ALL PRIVILEGES ON `travel_agency`.* TO 'sx'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
回收可以使用 REVOKE ... ON ... FROM 'xxx'@'xxx';
@前面為用戶名,@後面接限制的主機,%表示任何地方。(註意:這裡%有的版本不包括本地,遇到這個問題再加一個localhost的用戶就可以)
刪除用戶:
DROP USER ‘xx’@'xx';
but
在預設配置下進行第一步時會報出1819問題,說密碼不符合規範
預設配置的介紹
在mysql5.7版本後已經預設安裝validate_password插件,該插件可以控制密碼的最低要求
我們先查詢未改動的狀態,即預設狀態
mysql> 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_policy:安全強度,預設為中,即1,要求必須包含 數字、符號、大小寫字母,長度至少為8位
- validate_password_length:密碼最小長度
- validate_password_mixed_case_count:至少有大小寫字母n對,即2*n個
- validate_password_number_count:最少數字數量
- validate_password_special_char_count:最少符號數量
不常用:
- validate_password_check_user_name:用戶名檢測,檢測是否重名
- validate_password_dictionary_file:字典文件,啟動後必須要滿組所使用字典的規則才能滿足密碼的條件
Solution of 1819
我們為了可以使用xx@2的密碼,對相關參數做出調整即可(使用SET GLOBAL
)
...
set global validate_password_mixed_case_count=0;
-- 改為0對就不會強制要求必須有大小寫
set global validate_password_length=2;
最終改為
mysql> show variables like 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 2 |
| validate_password_mixed_case_count | 0 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
自動增大的validate_password_length
validate_password_length
會根據其他設定進行自動增大,計算公式為
密碼最小長度=數字最小長度+符合最小長度+2*(大小寫最小對數)
驗證如下:
ysql> set global validate_password_length=2;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 2 |
| validate_password_mixed_case_count | 0 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
mysql> set global validate_password_mixed_case_count=1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 4 |
| 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)