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

How can I get a list of user accounts using the command line in MySQL?

提问人:burntsugar 提问时间:7/16/2009 最后编辑:Peter Mortensenburntsugar 更新时间:3/28/2022 访问量:1436777

问:

我正在使用MySQL命令行实用程序,并且可以浏览数据库。现在,我需要查看用户帐户列表。我该怎么做?

我使用的是MySQL版本5.4.1。

mysql mysql5

评论

0赞 Rup 5/14/2019
@Mustapha 为什么标题会改变?这里的答案是您可以从任何地方运行的 SQL,而不仅仅是命令行。这个标签给问题增加了什么?
0赞 mhadidg 5/14/2019
我编辑的目的是保持标题和描述之间的一致性,但我认为你说得很有道理。进行编辑 Mr. @Rup

答:

1890赞 6 revs, 4 users 38%George Claghorn #1

使用此查询:

SELECT User FROM mysql.user;

这将输出如下表:

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

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

评论

47赞 Matthew Scharley 7/16/2009
我认为可能也有必要进行分组,以便仅获取唯一的用户值,因为每个@条目都有单独的行。Useruserhost
5赞 Divyanshu Das 10/21/2013
如何在没有sql查询的情况下找到相同的信息?
8赞 RolandoMySQLDBA 5/4/2014
@barrycarter最好有 如果你这样做,所有用户都走了。下次 mysql 重新启动后登录或从内存中删除用户。这是我关于负责任地做事的一篇文章的一个例子:dba.stackexchange.com/questions/4614/......DELETE FROM mysql.user;WHERE user='someuser' and host='somehost';DELETE FROM mysql.user;FLUSH PRIVILEGES;DELETE FROM mysql.user
3赞 fancyPants 4/28/2015
@GeoffreySHOW GRANTS FOR 'user'@'host';
5赞 user2683246 1/26/2016
您可以只使用关键字来代替分组:DISTINCTSELECT DISTINCT user FROM mysql.user;
31赞 Jesse Vogt 7/16/2009 #2

如果您指的是实际的MySQL用户,请尝试:

select User from mysql.user;
24赞 Etzeitet 7/16/2009 #3
SELECT * FROM mysql.user;

这是一个大表,所以你可能想对你选择的字段更有选择性。

评论

2赞 emotality 1/28/2015
我有 3 个具有不同主机的 root 用户。和。我必须保留哪一个,必须删除哪些?谢谢!localhost127.0.0.1::1
4赞 trysis 3/21/2015
如果您不希望人们通过网络连接,旧标准是删除所有这些。不过,如今似乎建议保留本地主机,因为它们无论如何都无法通过网络访问;这意味着您应该保留所有这些。
12赞 Armin Nehzat 5/5/2012 #4

Peter 和 Jesse 是正确的,但请确保您首先选择“mysql”数据库。

use mysql;
select User from mysql.user;

这应该可以解决问题。

评论

23赞 vitaLee 3/27/2013
如果您像以前那样将表的范围限定为 mysql 数据库,则没有必要。你可以只是use mysql;select User from mysql.user;
5赞 Dan 10/24/2013
添加只是为了让您改用,因为它通常是一次性查询,因此无需使用 mysql 数据库use mysql;select User from user;select User from mysql.user;
1赞 Sнаđошƒаӽ 2/13/2016
之后,如果你使用过,那本来可以是什么东西,但你正在使用 ,这使得一开始就没有必要使用。use mysqlselect user from user;mysql.useruse mysql
461赞 spkane 7/7/2012 #5

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

select User,Host from mysql.user;

评论

1赞 Prabhakar 3/12/2016
只是好奇。在使用 mysql 数据库时,这什么时候会发挥作用?[ mysql 菜鸟]host
7赞 Ray Baxter 4/25/2016
当您从其他服务器连接时,@Packer会发挥作用。可以授予对 和 的不同访问权限host'packer'@'example.com''packer'@'google.com'
52赞 Nicolas Manzini 9/30/2013 #6

要避免用户从不同源连接时重复,请执行以下操作:

select distinct User from mysql.user;
126赞 RolandoMySQLDBA 9/30/2013 #7

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

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

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

评论

7赞 Iain Samuel McLean Elder 10/15/2013
这与spkane的回答基本相同。连接用户列和主机列有什么好处?
8赞 Iain Samuel McLean Elder 10/15/2013
一个例子:该格式用于设置密码。从 SET PASSWORD 命令中省略主机会产生错误。 产生错误。包括主机,它就可以工作了。 生产。user@hostSET PASSWORD FOR wordpressuser = PASSWORD('...');ERROR 1133 (42000): Can't find any matching row in the user tableSET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');Query OK, 0 rows affected (0.00 sec)
3赞 sjas 5/22/2015
最好的答案,无论反对者可能会抱怨什么。我唯一要改变的是附加一个。ORDER BY user
19赞 sandip divekar 3/4/2014 #8

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

select User from mysql.user;

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

评论

0赞 leenephi 3/26/2014
我会说 +1 提到以 root 身份登录。我试过没有这样做,但它没有用;)
0赞 sandip divekar 3/26/2014
您需要向 user1 授予权限才能显示用户列表。如果没有root用户,您将收到错误。因此,首先提供权限。以 root 用户身份登录,然后键入命令 now 以 user1 身份登录并键入命令 您将看到显示的用户列表。:) +1 享受GRANT SELECT ON mysql.user TO 'user1'@'localhost';select User from mysql.user;
16赞 Brad Dre 12/28/2014 #9

mysql.db表在确定用户权限时可能更重要。我认为如果您在 GRANT 命令中提到一个表,就会在其中创建一个条目。就我而言,mysql.users 表在显然能够连接和选择等时没有显示用户的权限。

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

评论

2赞 Developer Marius Žilėnas 4/6/2015
在我看来,重要的是允许用户在数据库上做什么。因此,“SHOW GRANTS”非常有用,因为它显示了谁被允许做什么。
12赞 Nikhil Chavda 9/9/2016 #10

这将显示唯一用户列表:

SELECT DISTINCT User FROM mysql.user;
33赞 VPK 10/26/2016 #11

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

SELECT User, Host FROM mysql.user;

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | localhost |
| root             | demohost  |
| root             | 127.0.0.1 |
| debian-sys-maint | localhost |
|                  | %         |
+------------------+-----------+
13赞 Tobias Holm 11/3/2016 #12

我用它来对用户进行排序,因此允许的主机更容易被发现:

mysql> SELECT User,Host FROM mysql.user ORDER BY User,Host;
6赞 Mian Ahmad 2/21/2017 #13
$>  mysql -u root -p -e 'Select user from mysql.user' > allUsersOnDatabase.txt

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

4赞 Alper t. Turker 8/29/2017 #14

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

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

评论

0赞 Peter Mortensen 8/6/2021
什么是“DML”和“DDL”?你能链接到(特定的)上下文吗?
1赞 Arun Karnawat 2/15/2019 #15
SELECT User FROM mysql.user;

使用上面的查询获取 MySQL 用户。

1赞 Javier G.Raya 3/28/2022 #16

要查看您的用户,请使用 mysql 数据库。

USE mysql;

然后进行选择。

SELECT user,host FROM user;

另一种选择是将 BD.表

例如:

SELECT user,host FROM mysql.user;