如何在MySQL中使用命令行获取用户帐户列表?


1347

我正在使用MySQL命令行实用程序,并且可以浏览数据库。现在,我需要查看用户帐户列表。我怎样才能做到这一点?

我正在使用MySQL版本5.4.1


@Mustapha为什么标题更改?这个答案是可以在任何地方运行的SQL,而不仅仅是命令行。该标签又增加了什么问题?
Rup

我进行编辑的目的是保持标题和描述之间的一致性,但是我认为您有一个很好的观点。进行编辑@Rup先生
Mustapha Hadid

Answers:


1848

使用此查询:

SELECT User FROM mysql.user;

它将输出如下表:

+-------+
| User  |
+-------+
| root  |
+-------+
| user2 |
+-------+

正如Matthew Scharley 在对此答案的评论中指出的那样,User如果您只想查看唯一的用户名,则可以按列分组。


47
我认为可能也有必要进行分组User,以便仅获得唯一的用户值,因为每个user@ host条目都有单独的行。
马修·沙利

5
如何在不使用SQL查询的情况下查找相同的信息?
Divyanshu Das

8
@barrycarter DELETE FROM mysql.user;最好拥有,WHERE user='someuser' and host='somehost';如果这样做DELETE FROM mysql.user;,所有用户都消失了。下一个mysql重新启动后登录或FLUSH PRIVILEGES;从内存中删除用户。这里是我的职位之一的做一个例子DELETE FROM mysql.user负责任:dba.stackexchange.com/questions/4614/...
RolandoMySQLDBA

3
@GeoffreySHOW GRANTS FOR 'user'@'host';
fancyPants 2015年

5
除了分组,您还可以使用DISTINCT关键字:SELECT DISTINCT user FROM mysql.user;
user2683246 '16

445

我发现这种格式最有用,因为它包含主机字段,这在MySQL中对区分用户记录很重要。

select User,Host from mysql.user;

1
只是好奇。在host使用mysql数据库时,什么时候起作用?[Mysql Noob]
Prabhakar Undurthi

7
host从其他服务器连接时,@ Packer 会起作用。它可以将不同的访问权限授予'packer'@'example.com''packer'@'google.com'
雷巴克斯特

118

用户帐户包括用户名和主机级别访问权限。

因此,这是提供所有用户帐户的查询

SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;

7
这基本上与spkane的答案相同。串联user和host列有什么好处?
Iain Samuel McLean Elder 2013年

8
一个例子:该user@host格式用于设置密码。从SET PASSWORD命令中省略主机会产生错误。SET PASSWORD FOR wordpressuser = PASSWORD('...');产生错误ERROR 1133 (42000): Can't find any matching row in the user table。包括主机,它可以工作。SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');产生Query OK, 0 rows affected (0.00 sec)
伊恩·塞缪尔·麦克莱恩

3
最佳答案,无论反对者可能抱怨什么。我唯一要更改的内容就是附加一个ORDER BY user
2015年


31

MySQL将用户信息存储在其自己的数据库中。该数据库的名称为MySQL。在该数据库内部,用户信息位于名为的表(即数据集)中user。如果要查看在MySQL用户表中设置了哪些用户,请运行以下命令:

SELECT User, Host FROM mysql.user;

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | localhost |
| root             | demohost  |
| root             | 127.0.0.1 |
| debian-sys-maint | localhost |
|                  | %         |
+------------------+-----------+


23
SELECT * FROM mysql.user;

这是一张大桌子,所以您可能希望在选择哪些字段时更具选择性。


2
我有3个具有不同主机的root用户。localhost127.0.0.1::1。我必须保留哪一个,删除什么?谢谢!
情绪化

4
如果您不希望人们通过网络连接,则旧的标准是删除所有这些。但是,如今似乎建议保留本地主机,因为无论如何它们都不能通过网络访问。这意味着您应该保留所有这些。
trysis

18

以root身份登录mysql并键入以下查询

select User from mysql.user;

+------+
| User |
+------+
| amon |
| root |
| root |
+------+

我想说+1是提及以root身份登录。我没有这样做就尝试了,但没有成功;)
leenephi

您需要授予user1特权才能显示用户列表。没有root用户,您将得到错误。因此,首先提供特权。以root用户GRANT SELECT ON mysql.user TO 'user1'@'localhost'; 身份登录,然后键入command 现在以user1身份登录并键入command select User from mysql.user; 您将看到显示的用户列表。:) +1享受
的Sandip divekar

15

mysql.db表在确定用户权限时可能更重要。我认为,如果您在GRANT命令中提到一个表,则会在其中创建一个条目。在我的情况下,当mysql.users表显然能够连接和选择时,该表未显示用户权限。

mysql> select * from mysql.db;
mysql> select * from db;
+---------------+-----------------+--------+-------------+-------------+-------------+--------
| Host          | Db              | User   | Select_priv | Insert_priv | Update_priv | Del...

1
我认为重要的是允许用户在数据库上执行操作。因此“ SHOW GRANTS”非常有用,因为它显示了允许谁做某事。
开发人员MariusŽilėnas2015年


11

Peter和Jesse是正确的,但只需确保首先选择mysql DB。

use mysql;

select User from mysql.user;

那应该做你的把戏


22
不必use mysql;像以前那样将表范围限定到mysql数据库。您可以select User from mysql.user;
vitaLee

5
添加use mysql;的只是让你可以使用select User from user;,而不是select User from mysql.user;因为它通常是一个时间的查询,也没有必要使用MySQL数据库

1
之后,use mysql如果您曾经使用过select user from user;,那本来可以,但是相反,您正在使用mysql.user,这使得use mysql开始时不需要使用。
Sнаđошƒаӽ


5
$>  mysql -u root -p -e 'Select user from mysql.user' > allUsersOnDatabase.txt

在linux提示符下执行此命令将首先询问mysql root用户的密码,提供正确的密码后,它将把所有数据库用户打印到文本文件中。


3

我发现他的另一个有用,因为它提供了有关DML和DDL特权的其他信息

SELECT user, Select_priv, Insert_priv , Update_priv, Delete_priv, 
       Create_priv, Drop_priv, Shutdown_priv, Create_user_priv 
FROM mysql.user;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.