MySQL 支援使用 ACCOUNT LOCK
與 ACCOUNT UNLOCK
子句來鎖定與解除鎖定使用者帳戶,這些子句用於 CREATE USER
與 ALTER USER
陳述式。
當與
CREATE USER
一起使用時,這些子句指定新帳戶的初始鎖定狀態。在沒有任何子句的情況下,帳戶會以未鎖定狀態建立。如果已啟用
validate_password
元件,則不允許建立沒有密碼的帳戶,即使帳戶已鎖定也是如此。請參閱 第 8.4.3 節,「密碼驗證元件」。當與
ALTER USER
一起使用時,這些子句指定現有帳戶的新鎖定狀態。在沒有任何子句的情況下,帳戶鎖定狀態保持不變。ALTER USER ... UNLOCK
會解除聲明中指定的所有因登入失敗次數過多而暫時鎖定的帳戶。請參閱 第 8.2.15 節,「密碼管理」。
帳戶鎖定狀態記錄在 mysql.user
系統表格的 account_locked
欄位中。SHOW CREATE USER
的輸出會指出帳戶是否已鎖定或未鎖定。
如果用戶端嘗試連線到鎖定的帳戶,則嘗試會失敗。伺服器會遞增 Locked_connects
狀態變數,該變數會指出嘗試連線到鎖定帳戶的次數,並傳回 ER_ACCOUNT_HAS_BEEN_LOCKED
錯誤,並將訊息寫入錯誤日誌。
Access denied for user 'user_name'@'host_name'.
Account is locked.
鎖定帳戶不會影響使用假設鎖定帳戶身份的代理使用者進行連線。它也不會影響執行具有命名鎖定帳戶的 DEFINER
屬性的儲存程式或檢視的能力。也就是說,使用代理帳戶或儲存程式或檢視的能力不受鎖定帳戶的影響。
帳戶鎖定功能取決於 mysql.user
系統表格中是否存在 account_locked
欄位。若要從 MySQL 5.7.6 之前的版本升級,請執行 MySQL 升級程序,以確保此欄位存在。請參閱第 3 章,升級 MySQL。對於未升級且沒有 account_locked
欄位的安裝,伺服器會將所有帳戶視為未鎖定,並且使用 ACCOUNT LOCK
或 ACCOUNT UNLOCK
子句會產生錯誤。