大多数初学者 MySQL 用户问的一个常见问题是“如何查看 MySQL 服务器中的所有用户?” 他们中的大多数人假设 MySQL中有一个 show users命令,但实际上没有。这是一个常见的错误,因为还有其他 MySQL 命令用于显示有关数据库的信息。例如,SHOW DATABASES将向我们展示 MySQL 服务器中存在的所有数据库, SHOW TABLES并将向我们展示 MySQL 数据库中的所有表。
人们认为SHOW USERSMySQL 中应该有一个命令并不罕见。即使没有针对它的特定命令,也有多种方法可以实际查看用户列表,甚至可以过滤它们以准确查看需要的内容。这一切都可以通过 MySQL 命令行工具来完成——让我们开始吧。
登录到 Linux 服务器后,执行以下命令以登录 MySQL 命令行界面。
登录到您的 MySQL 服务器
使用以下命令以 root 身份登录到您的 MySQL 服务器:
mysql -u root -p
复制
然后输入您的 MySQL 根密码。默认情况下未设置,因此如果您从未设置过,只需按 [Enter] 键即可。但是,如果您已经设置了密码(无论是使用mysql_secure_installation脚本还是其他方式),您现在应该输入该密码。
MySQL 显示用户命令
我们将使用以下命令查询 User 表以显示所有 MySQL 用户:
SELECT User, Host, Password FROM mysql.user;
复制
所有 MySQL 用户的列表应该类似于下面的列表:
+------------------+--------------+--------------+
| user | host | password |
+------------------+--------------+--------------+
| root | localhost | 37as%#8123fs |
| debian-test-user | localhost | HmBEqPjC5Y |
| johnsm | localhost | |
| brian | localhost | |
| root | 111.111.111.1| |
| guest | % | |
| adrianr | 10.11.12.13 | RFsgY6aiVg |
+------------------+--------------+--------------+
7 rows in set (0.01 sec)
复制
如果您想添加更多列或排除一些列,只需使用您需要的列编辑命令。您可能只需要用户的名称,因此您可以使用 SELECT User FROM mysql.user;
查看所有用户的另一种方法是在从用户表中选择字段时简单地使用星号 (*) 通配符。它应该是这样的:
SELECT * FROM mysql.user;
复制
这将为每个用户返回所有可能的字段信息。请注意,字段的数量通常非常长/广泛,因此输出可能不可读,并且您可能不需要每个用户可用的所有信息。这就是为什么我们建议指定字段名称的原因,这样输出将很容易阅读,并且您只会看到您需要的信息。
一些字段与每个用户拥有的特权和权限有关(例如“Insert_priv”或“Drop_priv”),一些字段用于用户帐户的一般属性,例如“max_connections”或“max_updates”。
仅显示 MySQL 数据库中的唯一用户名
在某些情况下,选择用户表可能会产生重复的结果(例如,一个用户对应不同的主机,但用户名相同)——这会造成混乱,因此您可能只想显示唯一的用户名。
如果您只想显示不会在更多行中重复的唯一用户名,您可以使用 SELECT DISTINCT User FROM mysql.user;,它应该为您提供以下输出:
+------------------+
| user |
+------------------+
| root |
| debian-test-user |
| johnsm |
| brian |
| guest |
| adrianr |
+------------------+
6 rows in set (0.01 sec)
复制
没有重复的行,就像我们想要的那样。这可以让您清楚地了解数据库服务器上存在哪些用户。
MySQL用户表信息
正如我们在第 2 步中提到的,您可以使用许多字段来查看用户的特定属性。使用下一个命令,您将能够看到 MySQL 服务器支持的所有字段。要查看包含与用户表相关的描述的mysql.user表中的所有字段,请运行以下 MySQL 命令以查询数据库。
mysql> desc mysql.user;
复制
输出将类似于下面的输出。有很多选择!:
mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| 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(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | YES | | mysql_native_password | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
43 rows in set (0.00 sec)
复制
您现在可以将其与步骤 2 中给出的示例结合起来。例如,如果您想返回用户列表及其更新权限,您可以运行以下命令:
SELECT User, Update_priv FROM mysql.user;
复制
只需将“Update_priv”替换为您可能需要的任何字段。
显示有关当前用户的信息
您可以使用 MySQL 的内置功能来查看您用于登录 MySQL 命令行的用户的名称和主机。这是“user()”函数,你所要做的就是选择它:
SELECT user();
复制
输出应为您提供有关运行查询的用户的信息。
就是这样,至此,你应该已经学会了如何通过命令行显示 MySQL 用户帐户。