DROP USER [IF EXISTS] user [, user] ...
DROP USER
陳述式會移除一或多個 MySQL 帳戶及其權限。它會從所有授權表中移除該帳戶的權限列。
在 mandatory_roles
系統變數值中命名的角色無法被刪除。
若要使用 DROP USER
,您必須擁有全域的 CREATE USER
權限,或 mysql
系統結構描述的 DELETE
權限。當 read_only
系統變數啟用時,DROP USER
還需要 CONNECTION_ADMIN
權限(或已棄用的 SUPER
權限)。
如果任何要刪除的帳戶被命名為任何儲存物件的 DEFINER
屬性,DROP USER
將會失敗並出現錯誤。(也就是說,如果刪除帳戶會導致儲存的物件變成孤立,則陳述式會失敗。)若要執行此操作,您必須擁有 SET_ANY_DEFINER
或 ALLOW_NONEXISTENT_DEFINER
權限;在這種情況下,陳述式會成功,但會發出警告,而不是失敗並出現錯誤。如需其他資訊,包括如何識別哪些物件將給定帳戶命名為 DEFINER
屬性,請參閱 孤立儲存物件。
如果發生任何錯誤,DROP USER
要嘛對所有指定的用戶都成功,要嘛回滾且無任何作用。預設情況下,如果您嘗試刪除不存在的使用者,則會發生錯誤。如果給定 IF EXISTS
子句,則陳述式會為每個不存在的指定使用者產生警告,而不是錯誤。
如果陳述式成功,則會寫入二進制日誌,但如果失敗則不會;在這種情況下,會發生回滾且不會進行任何變更。寫入二進制日誌的陳述式包括所有指定的用戶。如果給定 IF EXISTS
子句,則即使是那些不存在且未被刪除的使用者也會包括在內。
每個帳戶名稱都使用第 8.2.4 節,「指定帳戶名稱」中所述的格式。例如
DROP USER 'jeffrey'@'localhost';
如果省略帳戶名稱的主機名稱部分,則預設為 '%'
。
DROP USER
不會自動關閉任何開啟的使用者工作階段。相反地,如果刪除具有開啟工作階段的使用者,則該陳述式在該使用者的工作階段關閉之前不會生效。一旦工作階段關閉,使用者就會被刪除,而該使用者下次嘗試登入時會失敗。這是按設計進行的。
DROP USER
不會自動刪除或使舊使用者建立的資料庫或其中的物件失效。這包括 DEFINER
屬性命名為已刪除使用者的儲存程式或檢視。如果此類物件在定義者安全環境中執行,則嘗試存取此類物件可能會產生錯誤。(如需關於安全環境的資訊,請參閱第 27.6 節,「儲存物件存取控制」。)