文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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=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=#
    系統變數 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=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 或對應的符號值 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 8.4 中,validate_password 外掛程式已重新實作為 validate_password 組件。validate_password 外掛程式已被棄用;預計會在未來版本的 MySQL 中移除。因此,其選項也已被棄用,且您應預期它們也會被移除。使用該外掛程式的 MySQL 安裝應轉換為使用組件。請參閱第 8.4.3.3 節「轉換至密碼驗證組件」

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

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

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

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

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