天天看點

MySQL如何啟用密碼強度審計【轉】

1.密碼驗證插件安裝

要使伺服器可以使用,插件庫檔案必須位于MySQL插件目錄(plugin_dir系統變量指定的目錄)中。如有必要,請設定plugin_dir伺服器啟動時的值, 以告知伺服器插件目錄位置。

插件庫檔案基本名稱是 validate_password。檔案名字尾因平台.so而異(例如,對于Unix和類Unix系統,.dll對于Windows)。

要在伺服器啟動時加載插件,請使用該 --plugin-load-add選項命名包含它的庫檔案。使用此插件加載方法,每次伺服器啟動時都必須提供該選項。例如,将這些行放在伺服器my.cnf檔案中(.so根據需要調整平台的 字尾):

[mysqld]
plugin-load-add=validate_password.so      

修改後my.cnf,重新啟動伺服器以使新設定生效。

或者,要在運作時注冊插件,請使用此語句(.so根據需要調整字尾):

INSTALL PLUGIN validate_password SONAME 'validate_password.so';

INSTALL PLUGIN加載插件,并将其注冊到mysql.plugins 系統表中,以便為每個後續的正常伺服器啟動加載插件。

要驗證插件安裝,請檢查 INFORMATION_SCHEMA.PLUGINS表或使用該SHOW PLUGINS語句

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
           FROM INFORMATION_SCHEMA.PLUGINS
           WHERE PLUGIN_NAME LIKE 'validate%';
    +-------------------+---------------+
    | PLUGIN_NAME       | PLUGIN_STATUS |
    +-------------------+---------------+
    | validate_password | ACTIVE        |
    +-------------------+---------------+      

如果插件無法初始化,請檢查伺服器錯誤日志以擷取診斷消息。

如果插件先前已注冊 INSTALL PLUGIN或已加載 --plugin-load-add,您可以使用--validate-password伺服器啟動時的選項來控制插件激活。例如,要在啟動時加載插件并防止在運作時删除它,請使用以下選項:

[mysqld]
plugin-load-add=validate_password.so
validate-password=FORCE_PLUS_PERMANENT      

1) 先檢視mysql全局參數配置

該問題其實與mysql的validate_password_policy的值有關。

檢視一下msyql密碼相關的幾個全局參數:

mysql> select @@validate_password_policy;
     
    +----------------------------+
     
    | @@validate_password_policy |
     
    +----------------------------+
     
    | MEDIUM |
     
    +----------------------------+
     
    1 row in set (0.00 sec)
     
     
    mysql> SHOW VARIABLES LIKE 'validate_password%';
     
    +--------------------------------------+--------+
     
    | Variable_name | Value |
     
    +--------------------------------------+--------+
     
    | 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 |
     
    +--------------------------------------+--------+
     
    6 rows in set (0.08 sec)      

2)參數解釋

validate_password_dictionary_file
     
    插件用于驗證密碼強度的字典檔案路徑。
     
     
    validate_password_length
     
    密碼最小長度,參數預設為8,它有最小值的限制,最小值為:validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)
     
     
    validate_password_mixed_case_count
     
    密碼至少要包含的小寫字母個數和大寫字母個數。
     
     
    validate_password_number_count
     
    密碼至少要包含的數字個數。
     
     
    validate_password_policy
     
    密碼強度檢查等級,0/LOW、1/MEDIUM、2/STRONG。有以下取值:
     
    Policy Tests Performed
     
    0 or LOW Length
     
    1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
     
    2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file
     
    預設是1,即MEDIUM,是以剛開始設定的密碼必須符合長度,且必須含有數字,小寫或大寫字母,特殊字元。
     
     
    validate_password_special_char_count
     
    密碼至少要包含的特殊字元數。      

3)修改mysql參數配置

改變密碼政策,修改簡單密碼

mysql> set global validate_password_policy=0;
     
    Query OK, 0 rows affected (0.05 sec)
    mysql> set global validate_password_mixed_case_count=0;
     
    Query OK, 0 rows affected (0.00 sec)
    mysql> set global validate_password_number_count=0;
     
    Query OK, 0 rows affected (0.00 sec)
    mysql> set global validate_password_special_char_count=0;
     
    Query OK, 0 rows affected (0.00 sec)
    mysql> set global validate_password_length=4;
     
    Query OK, 0 rows affected (0.00 sec)
    mysql> SHOW VARIABLES LIKE 'validate_password%';
     
    +--------------------------------------+-------+
     
    | Variable_name | Value |
     
    +--------------------------------------+-------+
     
    | validate_password_dictionary_file | |
     
    | validate_password_length | 4 |
     
    | validate_password_mixed_case_count | 0 |
     
    | validate_password_number_count | 0 |
     
    | validate_password_policy | LOW |
     
    | validate_password_special_char_count | 0 |
     
    +--------------------------------------+-------+
     
    6 rows in set (0.00 sec)      

4)修改簡單密碼:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');
     
    Query OK, 0 rows affected, 1 warning (0.00 sec)      

轉自

---------------------

作者:背鍋浩

版權聲明:本文為部落客原創文章,轉載請附上博文連結!

執行以下指令安裝密碼強度審計插件:

mysql>INSTALL PLUGIN validate_password SONAME 'validate_password.so';      

設定最強密碼政策:

mysql> set global validate_password_policy=strong;

Query OK, 0 rows affected (0.00 sec)

或者通過配置檔案my.cnf添加部分密碼強度相關參數:

[mysqld]

plugin-load=validate_password.so
validate_password_policy=2
validate-password=FORCE_PLUS_PERMANENT

然後執行show plugins指令檢視是否啟用成功:
mysql> show plugins;
+----------------------------+----------+--------------------+----------------------+---------+
| Name                       | Status   | Type               | Library              | License |
+----------------------------+----------+--------------------+----------------------+---------+
| validate_password          | ACTIVE   | VALIDATE PASSWORD  | validate_password.so | GPL     |
+----------------------------+----------+--------------------+----------------------+---------+      

設定後的密碼強度審計相關參數如下:

mysql> show global variables like 'validate%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | STRONG |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
6 rows in set (0.00 sec)      

--修改密碼,不符合規則會報錯

mysql> SET PASSWORD = PASSWORD('123456');  
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

mysql> SET PASSWORD = PASSWORD('aisino123!');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements      

修改成功,大小寫加數字和特殊字元最少1個,密碼長度最少8位:

mysql> SET PASSWORD = PASSWORD('Aisino123!');  --大小寫字碼加數字和特殊字元,最少8位
Query OK, 0 rows affected (0.00 sec)      

相關參數解釋如下:

validate_password_policy 這個參數用于控制validate_password的驗證政策 0-->low  1-->MEDIUM  2-->strong。
validate_password_length密碼長度的最小值(這個值最小要是4)。
validate_password_number_count 密碼中數字的最小個數。
validate_password_mixed_case_count大小寫的最小個數。
validate_password_special_char_count 特殊字元的最小個數。
validate_password_dictionary_file 字典檔案(插件用于驗證密碼強度的字典檔案路徑)