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 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. 的系統變數;這些是控制密碼原則的參數。請參閱第 8.4.3.2 節,「密碼驗證選項和變數」。xxx
如果未安裝 validate_password,則 validate_password. 系統變數不可用,語句中的密碼不會檢查,且 xxxVALIDATE_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 系統變數,該變數預設為啟用。