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

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

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

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

列出所有用户

您在寻找 MySQL SHOW USERS 命令吗?不幸的是,MySQL 没有 SHOW USERS 像 SHOW DATABASES 、 SHOW 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 表中有很多列,分别保存了用户的各种各样的信息,比如密码,密码有效期,是否锁定 和 各种权限等。

这里,我们只输出了 user 和 host 两列,其中 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 则可以使用。