How to get a list of MySQL user accounts
我正在使用mysql命令行实用程序,可以在数据库中导航。现在我需要查看用户帐户列表。我该怎么做?
我使用的是MySQL版本5.4.1。
使用此查询:
它将输出这样的表:
1 2 3 4 5 6 7
| +-------+
| User |
+-------+
| root |
+-------+
| user2 |
+-------+ |
正如Matthew Scharley在对这个答案的评论中指出的那样,如果您只想看到唯一的用户名,那么可以按User列分组。
- 我认为也有必要对User进行分组,以便只获得唯一的用户值,因为每个User@host条目都有一个单独的行。
- 如何在不使用SQL查询的情况下找到相同的信息??
- @巴里卡特·埃多克斯1〔3〕最好有埃多克斯1〔4〕如果你有埃多克斯1〔3〕的话,所有的用户都不见了。下一次mysql重启或FLUSH PRIVILEGES;后登录会从内存中删除用户。下面是我关于负责任地执行DELETE FROM mysql.user的一篇文章的一个例子:dba.stackexchange.com/questions/4614/…
- @Rolandomysqldba我可能应该在我最后的评论中加上一张笑脸:)我开玩笑,想知道删除所有用户是否会删除对数据库的所有访问权,包括恢复用户的访问权(也就是说,从你自己的脚下拉出地毯)。
- 是否也可以查看每个用户有权查看的表?
- @杰弗里·埃多克斯(geoffrey EDOCX1)(8)
- 您可以使用DISTINCT关键字:SELECT DISTINCT user FROM mysql.user;,而不是分组。
- @Matthewscharley:可以说分组是错误的,因为它们是不同的用户。
我发现这种格式最有用,因为它包含主机字段,这在MySQL中对于区分用户记录很重要。
- 只是好奇而已。使用MySQL数据库时,这个host什么时候起作用?[ MySQL NOOB]
- @打包机host在您从其他服务器连接时起作用。可以允许不同的访问'packer'@'example.com'和'packer'@'google.com'。
用户帐户由用户名和主机级访问组成。
因此,这是一个提供所有用户帐户的查询
- 这与斯普坎的回答基本相同。连接用户列和主机列有什么好处?
- 例如: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)。
- 最好的答案,不管反对者抱怨什么。我唯一想改变的是在它上面附加一个ORDER BY user。
要避免用户从不同来源连接时重复:
如果您引用的是实际的MySQL用户,请尝试:
MySQL将用户信息存储在自己的数据库中。数据库的名称是MySQL。在该数据库中,用户信息位于一个名为User的数据集表中。如果要查看在mysql用户表中设置了哪些用户,请运行以下命令:
1 2 3 4 5 6 7 8 9 10 11
| SELECT User, Host FROM mysql. user;
+------------------+-----------+
| User | Host |
+------------------+-----------+
| root | localhost |
| root | demohost |
| root | 127.0.0.1 |
| debian -sys -maint | localhost |
| | % |
+------------------+-----------+ |
这是一个很大的表,所以您可能希望对您选择的字段有更多的选择。
- 我有3个不同主机的根用户。localhost、127.0.0.1和::1。我必须保留哪一个,我必须删除什么?谢谢!
- 如果你不想让人们通过网络连接,旧的标准是删除所有这些。不过,现在的建议似乎是保留本地主机,因为它们无论如何都不能通过网络访问;这意味着您应该保留所有本地主机。
以根用户身份登录mysql,查询后键入
- 我会说+1提到作为根用户登录。我试着不这样做,但没用;)
- 您需要授予用户1显示用户列表的权限。如果没有根用户,您将得到错误。所以首先提供特权。以root用户身份登录,然后键入command GRANT SELECT ON mysql.user TO 'user1'@'localhost';,现在以user1身份登录,键入command select User from mysql.user;,您将看到显示的用户列表。+)1享受
在确定用户权限时,mysql.db表可能更重要。我认为如果您在grant命令中提到一个表,就会在其中创建一个条目。在我的例子中,mysql.users表在用户明显能够连接和选择等时没有显示用户的权限。
1 2 3 4
| mysql > select * from mysql.db ;
mysql > select * from db ;
+---------------+-----------------+--------+-------------+-------------+-------------+--------
| Host | Db | User | Select_priv | Insert_priv | Update_priv | Del... |
- 在我看来,重要的是允许用户在数据库上做什么。所以"演出赠款"是非常有用的,因为它显示了谁被允许做什么。
我使用此选项对用户进行排序,因此允许的主机更容易识别:
Peter和Jesse是正确的,但要确保首先选择MySQLdb。
use mysql;
select User from mysql.user;
那应该是你的把戏
- 如果您像以前那样将表范围扩展到MySQL数据库,那么use mysql;就不需要了。你只需要1〔15〕。
- 添加use mysql;只是为了使用select User from user;而不是select User from mysql.user;,因为它通常是一次性查询,不需要使用mysql db
- 在use mysql之后,如果你使用select User from user;的话,可能会有一些问题,但是你使用的是mysql.user,这使得开始使用use mysql是不必要的。
这将显示唯一用户列表:
1
| $> mysql -u root -p -e 'Select user from mysql.user' > allUsersOnDatabase.txt |
在linux提示符下执行这个命令,首先要求输入mysql根用户的密码,提供正确的密码后,会将所有数据库用户打印到文本文件中。
我发现他的一个更有用,因为它提供了有关DML和DDL特权的附加信息
1 2 3
| SELECT user, Select_priv , Insert_priv , Update_priv , Delete_priv ,
Create_priv , Drop_priv , Shutdown_priv , Create_user_priv
FROM mysql. user; |
使用上面的查询获取mysql用户