1. 程式人生 > 實用技巧 >Mysql 密碼引數配置與修改 validate_password

Mysql 密碼引數配置與修改 validate_password

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)