题 如何获取MySQL用户帐户列表


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

我正在使用MySQL版本 5.4.1


1214
2017-07-16 03:23


起源




答案:


使用此查询:

SELECT User FROM mysql.user;

这将输出如下表格:

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

正如Matthew Scharley 在这个答案的评论中指出,你可以分组 User 列,如果您只想查看唯一的用户名。


1744
2017-07-06 18:21



我认为可能有必要分组 User 也是,只获取唯一的用户值,因为每个都有一个单独的行 user@host 条目。 - Matthew Scharley
如何在没有sql查询的情况下找到相同的信息? - Divyanshu
@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
@Geoffrey SHOW GRANTS FOR 'user'@'host'; - fancyPants
而不是分组,你可以使用 DISTINCT 关键词: SELECT DISTINCT user FROM mysql.user; - user2683246


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

select User,Host from mysql.user;

417
2017-09-29 22:29



只是好奇。什么时候会这样 host 在使用mysql数据库时发挥作用? [Mysql Noob] - Prabhakar
@Packer了 host 从其他服务器连接时发挥作用。可以授予不同的访问权限 'packer'@'example.com' 和 'packer'@'google.com' - Ray Baxter


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

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

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

109
2017-09-29 22:01



这基本上是一样的 斯卡坎的回答。连接用户列和主机列有什么好处? - Iain Samuel McLean Elder
一个例子: user@host format用于设置密码。省略主持人 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)。 - Iain Samuel McLean Elder
无论反对者可能抱怨什么,最好的答案。我唯一想改变的是追加一个 ORDER BY user 它。 - sjas


避免用户从不同来源连接时重复使用:

select distinct User from mysql.user;

46
2017-07-16 03:28





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

select User from mysql.user;

27
2017-10-26 10:33





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 |
|                  | %         |
+------------------+-----------+

24
2017-07-16 03:29





SELECT * FROM mysql.user;

这是一张大桌子,所以你可能希望在你选择的领域更具选择性。


20
2018-03-04 06:46



我有3个不同主机的root用户。 localhost, 127.0.0.1 和 ::1。我必须保留哪一个,我必须删除哪些内容?谢谢! - emotality
如果您不希望人们通过网络连接,旧标准是删除所有这些。但是现在,似乎建议保留localhost,因为它们无法通过网络访问;这意味着你应该改为 保持 他们全部。 - trysis


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

select User from mysql.user;

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

17
2017-12-27 20:09



我会说+1提及以root身份登录。我尝试没有这样做,它没有工作;) - leenephi
您需要为user1授予权限才能显示用户列表。没有root用户,您将收到错误。所以首先提供特权。以root用户身份登录,然后键入命令 GRANT SELECT ON mysql.user TO 'user1'@'localhost';   现在以user1和type命令登录 select User from mysql.user;  您将看到显示的用户列表。 :) +1享受 - sandip divekar