在 MySQL 中使用 DROP USER 语句删除用户帐户

本文介绍了在 MySQL 中如何使用 DROP USER 语句从数据库中删除一个或多个用户帐户。

某些特定的场景下,您可能想要删除已有的用户,比如:

  • 此用户账户已经不被使用
  • 此用户账户已经被泄露

要从 MySQL 服务器中删除用户帐户,请使用 DROP USER 语句。

MySQL DROP USER 语句介绍

以下是 DROP USER 语句的基本语法:

DROP USER [IF EXISTS] account_name [,account_name2]...

在此语法中,您需要在 DROP USER 关键字后指定要删除的用户帐户的名称。

如果要一次删除多个用户帐户,请在 DROP USER 子句中指定以逗号分隔的用户帐户列表。

如果删除不存在的用户帐户,MySQL 将发出错误。您可以使用 IF EXISTS 子句仅在用户存在时有条件地删除用户。 不过 MySQL 5.7.8+ 以上的版本才支持 IF EXISTS 子句。

DROP USER 语句不但删除用户帐户,而且从所有授权表中删除用户的所有权限。

注意:如果删除的用户在删除之前已经登录了一个会话,删除后并不会影响此会话,直到会话结束。

MySQL DROP USER 实例

让我们看一个删除用户的例子。

  1. 使用 root 帐户连接到 MySQL 服务器:

    mysql -u root -p
    

    输入 root 用户的密码,然后按 Enter

    Enter password: ********
    
  2. 显示当前 MySQL 服务器的所有用户:

    SELECT user, host FROM mysql.user;
    

    这是当前的用户列表:

    +------------------+-----------+
    | user             | host      |
    +------------------+-----------+
    | root             | %         |
    | sqliz            | %         |
    | test_role1       | %         |
    | test_role2       | %         |
    | testuser         | %         |
    | mysql.infoschema | localhost |
    | mysql.session    | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    | sqliz            | localhost |
    +------------------+-----------+
  3. 使用以下 DROP USER 语句删除用户 sqliz@localhost

    DROP USER sqliz@localhost;
    
  4. 再次显示所有用户:

    SELECT user, host FROM mysql.user;
    
    +------------------+-----------+
    | user             | host      |
    +------------------+-----------+
    | root             | %         |
    | sqliz            | %         |
    | test_role1       | %         |
    | test_role2       | %         |
    | testuser         | %         |
    | mysql.infoschema | localhost |
    | mysql.session    | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    +------------------+-----------+

    用户帐户 sqliz@localhost 已成功删除。

杀掉已删除用户的会话

如果删除的用户在删除之前已经登录了一个会话,删除后并不会影响此会话,直到会话结束。这也会会带来危险。

你可以使用以下 SHOW PROCESSLIST 语句查看会话列表,并使用 KILL 语句结束已删除的用户的会话。

SHOW PROCESSLIST

这里是当前服务器的会话列表:

+----+-----------------+---------------------+---------+---------+---------+------------------------+------------------+
| Id | User            | Host                | db      | Command | Time    | State                  | Info             |
+----+-----------------+---------------------+---------+---------+---------+------------------------+------------------+
|  5 | event_scheduler | localhost           | NULL    | Daemon  | 4061212 | Waiting on empty queue | NULL             |
| 24 | root            | 192.168.0.204:54684 | NULL    | Query   |       0 | starting               | SHOW PROCESSLIST |
| 26 | sqliz           | localhost:54688     | sqlizdb | Sleep   |    1965 |                        | NULL             |
+----+-----------------+---------------------+---------+---------+---------+------------------------+------------------+

如您所见,用户帐户 sqliz@localhost 会话的 ID 是 26

您可以使用使用 KILL 语句终止会话 26

KILL 26;

结论

在本文中,您学习了如何使用 MySQL DROP USER 语句从 MySQL 数据库服务器中删除一个或多个用户账户。