DROP USER [IF EXISTS] user [, user] ...
The DROP USER
statement removes
one or more MySQL accounts and their privileges. It removes
privilege rows for the account from all grant tables.
Roles named in the
mandatory_roles
system variable
value cannot be dropped.
To use DROP USER
, you must have
the global CREATE USER
privilege,
or the DELETE
privilege for the
mysql
system schema. When the
read_only
system variable is
enabled, DROP USER
additionally
requires the CONNECTION_ADMIN
privilege (or the deprecated
SUPER
privilege).
As of MySQL 8.0.22, DROP USER
fails with an error if any account to be dropped is named as the
DEFINER
attribute for any stored object.
(That is, the statement fails if dropping an account would cause
a stored object to become orphaned.) To perform the operation
anyway, you must have the
SET_USER_ID
privilege; in this
case, the statement succeeds with a warning rather than failing
with an error. For additional information, including how to
identify which objects name a given account as the
DEFINER
attribute, see
Orphan Stored Objects.
DROP USER
either succeeds for all
named users or rolls back and has no effect if any error occurs.
By default, an error occurs if you try to drop a user that does
not exist. If the IF EXISTS
clause is given,
the statement produces a warning for each named user that does
not exist, rather than an error.
The statement is written to the binary log if it succeeds, but
not if it fails; in that case, rollback occurs and no changes
are made. A statement written to the binary log includes all
named users. If the IF EXISTS
clause is
given, this includes even users that do not exist and were not
dropped.
Each account name uses the format described in Section 8.2.4, “Specifying Account Names”. For example:
DROP USER 'jeffrey'@'localhost';
The host name part of the account name, if omitted, defaults to
'%'
.
DROP USER
does not
automatically close any open user sessions. Rather, in the
event that a user with an open session is dropped, the
statement does not take effect until that user's session is
closed. Once the session is closed, the user is dropped, and
that user's next attempt to log in fails. This
is by design.
DROP USER
does not automatically
drop or invalidate databases or objects within them that the old
user created. This includes stored programs or views for which
the DEFINER
attribute names the dropped user.
Attempts to access such objects may produce an error if they
execute in definer security context. (For information about
security context, see
Section 27.6, “Stored Object Access Control”.)