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
屬性指定了已刪除使用者的儲存程式或檢視表。如果此類物件在 definer 安全性內容中執行,則嘗試存取這些物件可能會產生錯誤。(有關安全性內容的資訊,請參閱第 27.7 節「儲存物件存取控制」。)