Documentation Home

13.7.1.5 DROP USER 语句

DROP USER [IF EXISTS] user [, user] ...

DROP USER语句删除一个或多个 MySQL 帐户及其权限。它从所有授权表中删除帐户的权限行。

mandatory_roles不能删除 在系统变量值中命名的角色 。

要使用DROP USER,您必须具有全局CREATE USER权限或系统架构的DELETE权限 。启用系统变量mysql时 ,还需要 权限(或已弃用的 权限)。 read_onlyDROP USERCONNECTION_ADMINSUPER

从 MySQL 8.0.22 开始,DROP USER 如果要删除的任何帐户被命名 DEFINER为任何存储对象的属性,则会失败并出现错误。(也就是说,如果删除帐户会导致存储的对象成为孤立对象,则该语句将失败。)无论如何要执行该操作,您必须拥有 SET_USER_ID特权;在这种情况下,语句成功并发出警告,而不是失败并出现错误。有关其他信息,包括如何识别哪些对象将给定帐户命名为 DEFINER属性,请参阅 孤立存储对象

DROP USER要么对所有命名用户成功,要么回滚,如果发生任何错误则无效。默认情况下,如果您尝试删除不存在的用户,则会发生错误。如果IF EXISTS给出该子句,该语句会为每个不存在的指定用户生成警告,而不是错误。

语句成功则写入二进制日志,失败则不写入;在这种情况下,将发生回滚并且不进行任何更改。写入二进制日志的语句包括所有命名用户。如果IF EXISTS给出该子句,这甚至包括不存在且未被删除的用户。

每个帐户名都使用 第 6.2.4 节“指定帐户名”中描述的格式。例如:

DROP USER 'jeffrey'@'localhost';

帐户名的主机名部分(如果省略)默认为 '%'.

重要的

DROP USER不会自动关闭任何打开的用户会话。相反,如果删除了打开会话的用户,则该语句在该用户的会话关闭之前不会生效。会话关闭后,用户将被删除,并且该用户的下一次登录尝试失败。这是设计使然

DROP USER不会自动删除或使旧用户创建的数据库或其中的对象失效。这包括DEFINER属性命名已删除用户的存储程序或视图。如果它们在定义者安全上下文中执行,则尝试访问此类对象可能会产生错误。(有关安全上下文的信息,请参阅 第 25.6 节,“存储对象访问控制”。)