列出 MySQL 数据库服务器中的所有用户

本文介绍了在 MySQL 中如何列出 MySQL 数据库服务器中的所有用户。

对于一个数据库管理员或者数据库运维人员来说,查看当前数据库服务器中的所有用户是很常用的操作。

在 MySQL 数据库服务器中, mysql 数据库存放了一些基本信息,包括了所有的用户。您可以从 mysql 数据库中的 user 表中查看所有的用户。

列出所有用户

您在寻找 MySQL SHOW USERS 命令吗?不幸的是,MySQL 没有 SHOW USERSSHOW DATABASESSHOW TABLES 等这样的命令。

要列出 MySQL 服务器的所有用户,您必须以管理员身份登录 MySQL 数据库服务器。在 mysql 客户端中,我们可以按照如下操作:

mysql -u root -p

输入 root 帐户的密码并按 Enter

Enter password: ********

使用下面的 SELECT 语句mysql 数据库中的 user 表中查询所有的用户:

SELECT user, host FROM mysql.user;

下面是我所在的 MySQL 服务器中的输出:

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| sqliz            | %         |
| test_role1       | %         |
| test_role2       | %         |
| test_user1_new   | %         |
| test_user2_new   | %         |
| test_user3_new   | %         |
| testuser         | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

mysql.user 表中有很多列,分别保存了用户的各种各样的信息,比如密码,密码有效期,是否锁定 和 各种权限等。

这里,我们只输出了 userhost 两列,其中 user 列保存了用户账户的用户名, host 列保存了用户账户允许登录的主机(它一般是主机名或者 IP 地址)。

要获取有关 user 表的更多信息,您可以使用以下命令输出所有 user 表的所有的列:

DESC mysql.user;

以下是完整的输出:

+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                    | Type                              | Null | Key | Default               | Extra |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                     | char(255)                         | NO   | PRI |                       |       |
| User                     | char(32)                          | NO   | PRI |                       |       |
| Select_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv                | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv                | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv               | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv               | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv               | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv               | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv      | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv               | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv   | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type                 | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher               | blob                              | NO   |     | NULL                  |       |
| x509_issuer              | blob                              | NO   |     | NULL                  |       |
| x509_subject             | blob                              | NO   |     | NULL                  |       |
| max_questions            | int unsigned                      | NO   |     | 0                     |       |
| max_updates              | int unsigned                      | NO   |     | 0                     |       |
| max_connections          | int unsigned                      | NO   |     | 0                     |       |
| max_user_connections     | int unsigned                      | NO   |     | 0                     |       |
| plugin                   | char(64)                          | NO   |     | caching_sha2_password |       |
| authentication_string    | text                              | YES  |     | NULL                  |       |
| password_expired         | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed    | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime        | smallint unsigned                 | YES  |     | NULL                  |       |
| account_locked           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_role_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_role_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Password_reuse_history   | smallint unsigned                 | YES  |     | NULL                  |       |
| Password_reuse_time      | smallint unsigned                 | YES  |     | NULL                  |       |
| Password_require_current | enum('N','Y')                     | YES  |     | NULL                  |       |
| User_attributes          | json                              | YES  |     | NULL                  |       |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+

显示当前用户

要获取有关当前用户的认证的信息,您可以使用 current_user() 函数,如下:

SELECT current_user();
+----------------+
| current_user() |
+----------------+
| root@%         |
+----------------+

要获取有关当前用户的信息,您可以使用 user() 函数,如下:

SELECT user();
+--------------------+
| user()             |
+--------------------+
| [email protected] |
+--------------------+

显示当前登录的用户

您可以以下使用 SHOW PROCESSLIST 语句获取当前登录的用户:

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

要列出当前登录 MySQL 数据库服务器的所有用户,请执行以下语句:

SELECT user, host, db, command
FROM information_schema.processlist;
+-----------------+---------------------+---------+---------+
| user            | host                | db      | command |
+-----------------+---------------------+---------+---------+
| root            | 192.168.0.204:54684 | NULL    | Query   |
| sqliz           | 192.168.0.204:54688 | sqlizdb | Sleep   |
| event_scheduler | localhost           | NULL    | Daemon  |
+-----------------+---------------------+---------+---------+

结论

在本文中,您学习了在 MySQL 中查询所有用户,当前登录的所有用户以及当前用户的信息的方法。

注意,在 MySQL 中没有 SHOW USERS 语句。而其他的诸如 SHOW DATABASES, SHOW TABLES 则可以使用。