列出 MySQL 数据库服务器中的所有用户
本文介绍了在 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
则可以使用。