本節說明 validate_password
提供的系統和狀態變數,以設定和監控其運作。
如果啟用 validate_password
元件,它會公開數個系統變數,讓您可以設定密碼檢查
mysql> SHOW VARIABLES LIKE 'validate_password.%';
+-------------------------------------------------+--------+
| Variable_name | Value |
+-------------------------------------------------+--------+
| validate_password.changed_characters_percentage | 0 |
| 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 |
+-------------------------------------------------+--------+
若要變更密碼檢查方式,您可以在伺服器啟動時或執行階段設定這些系統變數。以下清單說明每個變數的含義。
validate_password.changed_characters_percentage
命令列格式 --validate-password.changed-characters-percentage[=value]
系統變數 validate_password.changed_characters_percentage
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 整數 預設值 0
最小值 0
最大值 100
指出使用者在
validate_password
接受使用者自己帳戶的新密碼之前,必須變更的密碼中最少字元數,以所有字元的百分比表示。這僅適用於變更現有密碼,對於設定使用者帳戶的初始密碼無效。除非安裝
validate_password
,否則無法使用此變數。預設情況下,
validate_password.changed_characters_percentage
允許新密碼重複使用目前密碼中的所有字元。有效百分比範圍為 0 到 100。如果設定為 100%,則無論大小寫,都會拒絕目前密碼中的所有字元。字元 'abc
' 和 'ABC
' 被視為相同的字元。如果validate_password
拒絕新密碼,它會報告一個錯誤,指出必須不同的最少字元數。如果
ALTER USER
陳述式未在REPLACE
子句中提供現有密碼,則不會強制執行此變數。是否需要REPLACE
子句取決於密碼驗證策略對特定帳戶的應用。有關此策略的概述,請參閱密碼驗證要求策略。validate_password.check_user_name
命令列格式 --validate-password.check-user-name[={OFF|ON}]
系統變數 validate_password.check_user_name
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 布林值 預設值 ON
validate_password
是否將密碼與目前工作階段的有效使用者帳戶的使用者名稱部分進行比較,如果它們匹配則拒絕。除非已安裝validate_password
,否則此變數不可用。預設情況下,
validate_password.check_user_name
已啟用。此變數控制使用者名稱的匹配,與validate_password.policy
的值無關。當
validate_password.check_user_name
啟用時,它會產生以下影響在所有調用
validate_password
的情況下都會進行檢查,包括使用ALTER USER
或SET PASSWORD
等陳述式來更改目前使用者的密碼,以及調用VALIDATE_PASSWORD_STRENGTH()
等函式。用於比較的用戶名取自目前工作階段的
USER()
和CURRENT_USER()
函式的值。一個含義是,有足夠權限設定其他使用者密碼的使用者可以將密碼設定為該使用者的名稱,而不能將該使用者的密碼設定為執行陳述式的使用者的名稱。例如,'root'@'localhost'
可以將'jeffrey'@'localhost'
的密碼設定為'jeffrey'
,但不能將密碼設定為'root'
。僅使用
USER()
和CURRENT_USER()
函式值的用戶名部分,而不是主機名稱部分。如果用戶名為空,則不會進行比較。如果密碼與用戶名或其反向相同,則會發生匹配並拒絕密碼。
用戶名匹配是區分大小寫的。密碼和用戶名值會以逐位元組的方式作為二進位字串進行比較。
如果密碼與使用者名稱相符,則無論其他
validate_password
系統變數如何設定,VALIDATE_PASSWORD_STRENGTH()
都會傳回 0。
validate_password.dictionary_file
命令列格式 --validate-password.dictionary-file=file_name
系統變數 validate_password.dictionary_file
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 檔案名稱 validate_password
用於檢查密碼的字典檔路徑名稱。除非已安裝validate_password
,否則此變數不可用。預設情況下,此變數的值為空,且不會執行字典檢查。若要執行字典檢查,變數值必須不為空。如果檔案名稱為相對路徑,則會相對於伺服器資料目錄進行解譯。檔案內容應為小寫,每行一個單字。內容會被視為具有
utf8mb3
字元集。允許的最大檔案大小為 1MB。若要在密碼檢查期間使用字典檔,密碼策略必須設定為 2 (
STRONG
);請參閱validate_password.policy
系統變數的描述。假設情況為真,則會將密碼長度從 4 到 100 的每個子字串與字典檔中的單字進行比較。任何匹配都會導致密碼被拒絕。比較不區分大小寫。對於
VALIDATE_PASSWORD_STRENGTH()
,會根據所有策略(包括STRONG
)檢查密碼,因此強度評估包含字典檢查,而不論validate_password.policy
的值為何。可以在執行階段設定
validate_password.dictionary_file
,而且指派值會導致讀取指定的檔案,而無需重新啟動伺服器。-
命令列格式 --validate-password.length=#
系統變數 validate_password.length
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 整數 預設值 8
最小值 0
validate_password
要求密碼必須具有的最少字元數。除非已安裝validate_password
,否則此變數不可用。validate_password.length
的最小值是數個其他相關系統變數的函式。該值不能設定為小於此表達式的值validate_password.number_count + validate_password.special_char_count + (2 * validate_password.mixed_case_count)
如果
validate_password
因為上述限制而調整了validate_password.length
的值,則會在錯誤日誌中寫入訊息。 validate_password.mixed_case_count
命令列格式 --validate-password.mixed-case-count=#
系統變數 validate_password.mixed_case_count
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 整數 預設值 1
最小值 0
如果密碼策略為
MEDIUM
或更強,則validate_password
要求密碼必須具有的最少小寫和大寫字元數。除非已安裝validate_password
,否則此變數不可用。對於給定的
validate_password.mixed_case_count
值,密碼必須具有該數量的小寫字元和該數量的大寫字元。validate_password.number_count
命令列格式 --validate-password.number-count=#
系統變數 validate_password.number_count
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 整數 預設值 1
最小值 0
如果密碼策略為
MEDIUM
或更強,則validate_password
要求密碼必須具有的最少數字 (數字) 字元數。除非已安裝validate_password
,否則此變數不可用。-
命令列格式 --validate-password.policy=value
系統變數 validate_password.policy
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 列舉 預設值 1
有效值 0
1
2
validate_password
強制執行的密碼策略。除非已安裝validate_password
,否則此變數不可用。validate_password.policy
會影響validate_password
如何使用其其他策略設定系統變數,但將密碼與使用者名稱進行比較除外,此比較由validate_password.check_user_name
獨立控制。可以使用數值 0、1、2 或對應的符號值
LOW
、MEDIUM
、STRONG
來指定validate_password.policy
值。下表說明每個策略執行的測試。對於長度測試,所需的長度是validate_password.length
系統變數的值。同樣地,其他測試的所需值由其他validate_password.
變數提供。xxx
策略 執行的測試 0
或LOW
長度 1
或MEDIUM
長度;數字、小寫/大寫和特殊字元 2
或STRONG
長度;數字、小寫/大寫和特殊字元;字典檔 validate_password.special_char_count
命令列格式 --validate-password.special-char-count=#
系統變數 validate_password.special_char_count
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 整數 預設值 1
最小值 0
如果密碼策略為
MEDIUM
或更強,則validate_password
要求密碼必須具有的最少非字母數字字元數。除非已安裝validate_password
,否則此變數不可用。
如果已啟用 validate_password
元件,它會公開提供操作資訊的狀態變數
mysql> SHOW STATUS LIKE 'validate_password.%';
+-----------------------------------------------+---------------------+
| Variable_name | Value |
+-----------------------------------------------+---------------------+
| validate_password.dictionary_file_last_parsed | 2019-10-03 08:33:49 |
| validate_password.dictionary_file_words_count | 1902 |
+-----------------------------------------------+---------------------+
以下清單描述了每個狀態變數的含義。
validate_password.dictionary_file_last_parsed
上次剖析字典檔的時間。除非已安裝
validate_password
,否則此變數不可用。validate_password.dictionary_file_words_count
從字典檔讀取的單字數。除非已安裝
validate_password
,否則此變數不可用。
在 MySQL 8.4 中,validate_password
外掛程式已重新實作為 validate_password
組件。validate_password
外掛程式已被棄用;預計會在未來版本的 MySQL 中移除。因此,其選項也已被棄用,且您應預期它們也會被移除。使用該外掛程式的 MySQL 安裝應轉換為使用組件。請參閱第 8.4.3.3 節「轉換至密碼驗證組件」。
若要控制 validate_password
外掛程式的啟用,請使用此選項
-
命令列格式 --validate-password[=value]
類型 列舉 預設值 ON
有效值 ON
OFF
FORCE
FORCE_PLUS_PERMANENT
此選項控制伺服器在啟動時如何載入已棄用的
validate_password
外掛程式。該值應為外掛程式載入選項的可用值之一,如第 7.6.1 節「安裝與解除安裝外掛程式」所述。例如,--validate-password=FORCE_PLUS_PERMANENT
會告知伺服器在啟動時載入該外掛程式,並防止其在伺服器執行時被移除。只有在
validate_password
外掛程式先前已使用INSTALL PLUGIN
註冊,或已使用--plugin-load-add
載入時,此選項才可用。請參閱第 8.4.3.1 節「密碼驗證組件安裝與解除安裝」。
在 MySQL 8.4 中,validate_password
外掛程式已重新實作為 validate_password
組件。validate_password
外掛程式已被棄用;預計會在未來版本的 MySQL 中移除。因此,其系統變數也已被棄用,且您應預期它們也會被移除。請改用 validate_password
組件的對應系統變數;請參閱密碼驗證組件系統變數。使用該外掛程式的 MySQL 安裝應轉換為使用組件。請參閱第 8.4.3.3 節「轉換至密碼驗證組件」。
validate_password_check_user_name
命令列格式 --validate-password-check-user-name[={OFF|ON}]
系統變數 validate_password_check_user_name
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 布林值 預設值 ON
此
validate_password
外掛程式系統變數已棄用;預計會在未來版本的 MySQL 中移除。請改用validate_password
組件的對應validate_password.check_user_name
系統變數。validate_password_dictionary_file
命令列格式 --validate-password-dictionary-file=file_name
系統變數 validate_password_dictionary_file
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 檔案名稱 此
validate_password
外掛程式系統變數已棄用;預計會在未來版本的 MySQL 中移除。請改用validate_password
組件的對應validate_password.dictionary_file
系統變數。-
命令列格式 --validate-password-length=#
系統變數 validate_password_length
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 整數 預設值 8
最小值 0
此
validate_password
外掛程式系統變數已棄用;預計會在未來版本的 MySQL 中移除。請改用validate_password
組件的對應validate_password.length
系統變數。 validate_password_mixed_case_count
命令列格式 --validate-password-mixed-case-count=#
系統變數 validate_password_mixed_case_count
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 整數 預設值 1
最小值 0
此
validate_password
外掛程式系統變數已棄用;預計會在未來版本的 MySQL 中移除。請改用validate_password
組件的對應validate_password.mixed_case_count
系統變數。validate_password_number_count
命令列格式 --validate-password-number-count=#
系統變數 validate_password_number_count
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 整數 預設值 1
最小值 0
此
validate_password
外掛程式系統變數已棄用;預計會在未來版本的 MySQL 中移除。請改用validate_password
組件的對應validate_password.number_count
系統變數。-
命令列格式 --validate-password-policy=value
系統變數 validate_password_policy
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 列舉 預設值 1
有效值 0
1
2
此
validate_password
外掛程式系統變數已棄用;預計會在未來版本的 MySQL 中移除。請改用validate_password
組件的對應validate_password.policy
系統變數。 validate_password_special_char_count
命令列格式 --validate-password-special-char-count=#
系統變數 validate_password_special_char_count
範圍 全域 動態 是 SET_VAR
提示語套用否 類型 整數 預設值 1
最小值 0
此
validate_password
外掛程式系統變數已棄用;預計會在未來版本的 MySQL 中移除。請改用validate_password
組件的對應validate_password.special_char_count
系統變數。
在 MySQL 8.4 中,validate_password
外掛程式已重新實作為 validate_password
組件。validate_password
外掛程式已被棄用;預計會在未來版本的 MySQL 中移除。因此,其狀態變數也已被棄用;預計會被移除。請使用 validate_password
組件的對應狀態變數;請參閱密碼驗證組件狀態變數。使用該外掛程式的 MySQL 安裝應轉換為使用組件。請參閱第 8.4.3.3 節「轉換至密碼驗證組件」。
validate_password_dictionary_file_last_parsed
此
validate_password
外掛程式狀態變數已棄用;預計會在未來版本的 MySQL 中移除。請改用validate_password
組件的對應validate_password.dictionary_file_last_parsed
狀態變數。validate_password_dictionary_file_words_count
此
validate_password
外掛程式狀態變數已棄用;預計會在未來版本的 MySQL 中移除。請改用validate_password
組件的對應validate_password.dictionary_file_words_count
狀態變數。