文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  密碼驗證組件

8.4.3 密碼驗證組件

validate_password 組件透過要求帳戶密碼並啟用潛在密碼的強度測試來增強安全性。此組件會公開系統變數,讓您能夠設定密碼原則,並公開狀態變數,以供組件監視之用。

validate_password 組件會實作下列功能:

  • 對於以明文值提供的指派密碼的 SQL 陳述式,validate_password 會根據目前的密碼原則檢查密碼,如果密碼強度不足則拒絕密碼 (陳述式會傳回 ER_NOT_VALID_PASSWORD 錯誤)。這適用於 ALTER USERCREATE USERSET PASSWORD 陳述式。

  • 對於 CREATE USER 陳述式,validate_password 要求必須提供密碼,而且密碼必須符合密碼原則。即使帳戶一開始是鎖定的,情況也是如此,因為否則稍後解除鎖定帳戶會導致它在沒有符合原則的密碼的情況下就能夠存取。

  • validate_password 會實作 VALIDATE_PASSWORD_STRENGTH() SQL 函數,用以評估潛在密碼的強度。此函數會接受密碼引數,並傳回從 0 (弱) 到 100 (強) 的整數。

注意

對於指定或修改帳戶密碼的語句(ALTER USERCREATE USERSET PASSWORD),這裡描述的 validate_password 功能僅適用於使用將憑證內部儲存在 MySQL 中的身份驗證外掛程式的帳戶。對於使用針對 MySQL 外部憑證系統執行身份驗證的外掛程式的帳戶,密碼管理也必須在該系統外部處理。有關內部憑證儲存的更多資訊,請參閱第 8.2.15 節,「密碼管理」

先前的限制不適用於使用 VALIDATE_PASSWORD_STRENGTH() 函數,因為它不會直接影響帳戶。

範例

  • validate_password 會檢查以下語句中的明文密碼。在預設密碼原則下,密碼長度必須至少為 8 個字元,該密碼屬於弱密碼,並且該語句會產生錯誤。

    mysql> ALTER USER USER() IDENTIFIED BY 'abc';
    ERROR 1819 (HY000): Your password does not satisfy the current
    policy requirements
  • 指定為雜湊值的密碼不會檢查,因為無法取得原始密碼值以供檢查。

    mysql> ALTER USER 'jeffrey'@'localhost'
           IDENTIFIED WITH sha256_password
           AS '*0D3CED9BEC10A777AEC23CCC353A8C08A633045E';
    Query OK, 0 rows affected (0.01 sec)
  • 即使帳戶最初已鎖定,此帳戶建立語句仍會失敗,因為它不包含符合目前密碼原則的密碼。

    mysql> CREATE USER 'juanita'@'localhost' ACCOUNT LOCK;
    ERROR 1819 (HY000): Your password does not satisfy the current
    policy requirements
  • 若要檢查密碼,請使用 VALIDATE_PASSWORD_STRENGTH() 函數。

    mysql> SELECT VALIDATE_PASSWORD_STRENGTH('weak');
    +------------------------------------+
    | VALIDATE_PASSWORD_STRENGTH('weak') |
    +------------------------------------+
    |                                 25 |
    +------------------------------------+
    mysql> SELECT VALIDATE_PASSWORD_STRENGTH('lessweak$_@123');
    +----------------------------------------------+
    | VALIDATE_PASSWORD_STRENGTH('lessweak$_@123') |
    +----------------------------------------------+
    |                                           50 |
    +----------------------------------------------+
    mysql> SELECT VALIDATE_PASSWORD_STRENGTH('N0Tweak$_@123!');
    +----------------------------------------------+
    | VALIDATE_PASSWORD_STRENGTH('N0Tweak$_@123!') |
    +----------------------------------------------+
    |                                          100 |
    +----------------------------------------------+

若要設定密碼檢查,請修改名稱格式為 validate_password.xxx 的系統變數;這些是控制密碼原則的參數。請參閱第 8.4.3.2 節,「密碼驗證選項和變數」

如果未安裝 validate_password,則 validate_password.xxx 系統變數不可用,語句中的密碼不會檢查,且 VALIDATE_PASSWORD_STRENGTH() 函數一律傳回 0。例如,如果未安裝外掛程式,則可以將短於 8 個字元的密碼指派給帳戶,或完全不指派密碼。

假設已安裝 validate_password,它會實作三個等級的密碼檢查:LOWMEDIUMSTRONG。預設值為 MEDIUM;若要變更此值,請修改 validate_password.policy 的值。這些原則會實作越來越嚴格的密碼測試。以下說明參考預設參數值,您可以透過變更適當的系統變數來修改這些值。

此外,validate_password 支援拒絕與目前工作階段的有效使用者帳戶的使用者名稱部分(向前或向後)相符的密碼的功能。若要控制此功能,validate_password 會公開 validate_password.check_user_name 系統變數,該變數預設為啟用。