文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
手冊頁 (TGZ) - 258.2Kb
手冊頁 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  密碼驗證選項和變數

8.4.3.2 密碼驗證選項和變數

本節說明 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 USERSET 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=#
    系統變數 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=值
    系統變數 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 或對應的符號值 LOWMEDIUMSTRONG 來指定 validate_password.policy 的值。下表描述每個原則執行的測試。對於長度測試,所需長度是 validate_password.length 系統變數的值。同樣,其他測試的所需值由其他 validate_password.xxx 變數給定。

    原則 執行的測試
    0LOW 長度
    1MEDIUM 長度;數字、小寫/大寫和特殊字元
    2STRONG 長度;數字、小寫/大寫和特殊字元;字典檔案
  • 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                |
+-----------------------------------------------+---------------------+

以下列表描述每個狀態變數的含義。

密碼驗證外掛程式選項
注意

在 MySQL 9.0 中,validate_password 外掛程式已重新實作為 validate_password 元件。validate_password 外掛程式已被棄用;預計將在未來版本的 MySQL 中移除。因此,其選項也已被棄用,您應該預期它們也會被移除。使用此外掛程式的 MySQL 安裝應該轉換為改用該元件。請參閱第 8.4.3.3 節,「轉換至密碼驗證元件」

若要控制 validate_password 外掛程式的啟用,請使用此選項

密碼驗證外掛程式系統變數
注意

在 MySQL 9.0 中,validate_password 外掛程式已重新實作為 validate_password 元件。validate_password 外掛程式已被棄用;預計將在未來版本的 MySQL 中移除。因此,其系統變數也已被棄用,您應該預期它們也會被移除。請改用 validate_password 元件的對應系統變數;請參閱密碼驗證元件系統變數。使用此外掛程式的 MySQL 安裝應該轉換為改用該元件。請參閱第 8.4.3.3 節,「轉換至密碼驗證元件」

密碼驗證外掛程式狀態變數
注意

在 MySQL 9.0 中,validate_password 外掛程式已重新實作為 validate_password 元件。validate_password 外掛程式已被棄用;預計將在未來版本的 MySQL 中移除。因此,其狀態變數也已被棄用;預計將被移除。請改用 validate_password 元件的對應狀態變數;請參閱密碼驗證元件狀態變數。使用此外掛程式的 MySQL 安裝應該轉換為改用該元件。請參閱第 8.4.3.3 節,「轉換至密碼驗證元件」