15.7.1.5 删除用户语句
DROP USER [IF EXISTS] user [, user] ...
DROP USER
语句删除一个或多个 MySQL 账户和它们的权限。它从所有授权表中删除账户的权限行。
在mandatory_roles
系统变量值中指定的角色不能被删除。
要使用DROP USER
,你必须拥有全局CREATE USER
权限,或者DELETE
权限对mysql
系统架构。启用read_only
系统变量时,DROP USER
还需要CONNECTION_ADMIN
权限(或弃用的SUPER
权限)。
DROP USER
如果要删除的账户是某个存储对象的 DEFINER
属性将失败。 (即,删除账户将导致存储对象成为孤儿对象。) 要执行该操作,可以拥有 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节,“存储对象访问控制”。)