文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 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 密碼驗證元件

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 mysql_native_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 系統變數,預設情況下已啟用。