本節說明 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=檔案名稱
系統變數 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=值
系統變數 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 9.0 中,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
告訴伺服器在啟動時載入此外掛程式,並防止在伺服器執行時移除它。只有在先前已使用
INSTALL PLUGIN
註冊validate_password
外掛程式,或使用--plugin-load-add
載入時,此選項才可用。請參閱第 8.4.3.1 節,「密碼驗證元件安裝和解除安裝」。
在 MySQL 9.0 中,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 9.0 中,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
狀態變數。