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 子句會產生錯誤。