validate_password
元件藉由要求帳戶密碼並啟用潛在密碼的強度測試來提升安全性。此元件公開系統變數,可讓您設定密碼原則,以及用於元件監控的狀態變數。
validate_password
元件實作這些功能
對於以明文值形式指派密碼的 SQL 陳述式,
validate_password
會根據目前的密碼原則檢查密碼,如果密碼強度不足,則會拒絕密碼 (陳述式會傳回ER_NOT_VALID_PASSWORD
錯誤)。這適用於ALTER USER
、CREATE USER
和SET PASSWORD
陳述式。對於
CREATE USER
陳述式,validate_password
要求必須提供密碼,且密碼必須符合密碼原則。即使帳戶最初是鎖定的,也是如此,因為否則稍後解除鎖定帳戶會導致它在沒有符合原則的密碼的情況下變得可存取。validate_password
實作VALIDATE_PASSWORD_STRENGTH()
SQL 函式,該函式會評估潛在密碼的強度。此函式會採用密碼引數,並傳回一個從 0 (弱) 到 100 (強) 的整數。
對於指定或修改帳戶密碼的語句 (例如 ALTER USER
、CREATE USER
和 SET 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.
形式的系統變數;這些是控制密碼策略的參數。請參閱 第 8.4.3.2 節,「密碼驗證選項和變數」。xxx
如果未安裝 validate_password
,則 validate_password.
系統變數將不可用,語句中的密碼不會被檢查,並且 xxx
VALIDATE_PASSWORD_STRENGTH()
函數始終返回 0。例如,在沒有安裝外掛程式的情況下,可以為帳戶分配短於 8 個字元的密碼,甚至完全不分配密碼。
假設已安裝 validate_password
,它會實作三個層級的密碼檢查:LOW
、MEDIUM
和 STRONG
。預設值為 MEDIUM
;若要變更此值,請修改 validate_password.policy
的值。這些策略實作越來越嚴格的密碼測試。以下描述是指預設的參數值,這些值可以通過變更適當的系統變數來修改。
LOW
策略僅測試密碼長度。密碼必須至少為 8 個字元長。若要變更此長度,請修改validate_password.length
。MEDIUM
策略新增了密碼必須至少包含 1 個數字字元、1 個小寫字元、1 個大寫字元和 1 個特殊 (非字母數字) 字元的條件。若要變更這些值,請修改validate_password.number_count
、validate_password.mixed_case_count
和validate_password.special_char_count
。STRONG
策略新增了長度為 4 或更長的密碼子字串不得與字典檔案中的單字相符的條件 (如果已指定)。若要指定字典檔案,請修改validate_password.dictionary_file
。
此外,validate_password
支援拒絕與當前會話的有效使用者帳戶的使用者名稱部分 (正向或反向) 相符的密碼的功能。為了對此功能提供控制,validate_password
公開了一個 validate_password.check_user_name
系統變數,預設情況下已啟用。