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
資料行。對於從舊於 5.7.6 的 MySQL 版本升級,請執行 MySQL 升級程序,以確保此資料行存在。請參閱 第 3 章,《升級 MySQL》。對於沒有 account_locked
資料行的未升級安裝,伺服器會將所有帳戶視為解除鎖定,而使用 ACCOUNT LOCK
或 ACCOUNT UNLOCK
子句會產生錯誤。