如何使用 MySQL 中的命令行获取用户帐户列表?
Posted
技术标签:
【中文标题】如何使用 MySQL 中的命令行获取用户帐户列表?【英文标题】:How can I get a list of user accounts using the command line in MySQL? 【发布时间】:2010-11-11 05:42:37 【问题描述】:我正在使用 mysql 命令行实用程序,并且可以浏览数据库。现在我需要查看用户帐户列表。我该怎么做?
我使用的是 MySQL 5.4.1 版。
【问题讨论】:
@Mustapha 为什么标题变了?这里的答案是您可以从任何地方运行的 SQL,而不仅仅是命令行。这个标签给问题添加了什么? 我编辑的目的是保持标题和描述之间的一致性,但我认为你的观点很好。进行编辑@Rup 先生 【参考方案1】:使用这个查询:
SELECT User FROM mysql.user;
会输出这样的表格:
+-------+
| User |
+-------+
| root |
+-------+
| user2 |
+-------+
作为 Matthew Scharley points out in the comments on this answer,如果您只想查看唯一的用户名,可以按 User
列分组。
【讨论】:
我认为可能也有必要在User
上进行分组,以仅获取唯一的用户值,因为每个 user
@host
条目都有单独的行。
如何在没有sql查询的情况下找到相同的信息??
@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/…
@Geoffrey SHOW GRANTS FOR 'user'@'host';
你可以使用DISTINCT
关键字而不是分组:SELECT DISTINCT user FROM mysql.user;
【参考方案2】:
我发现这种格式最有用,因为它包含在 MySQL 中用于区分用户记录的主机字段。
select User,Host from mysql.user;
【讨论】:
只是好奇。使用 mysql 数据库时,host
何时会发挥作用? [Mysql 菜鸟]
@Packer 当您从不同的服务器连接时,host
会发挥作用。可以授予对'packer'@'example.com'
和'packer'@'google.com'
的不同访问权限【参考方案3】:
用户帐户包括用户名和主机级别的访问权限。
因此,这是提供所有用户帐户的查询
SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;
【讨论】:
这个和spkane's answer基本一样。连接用户列和主机列有什么好处? 一个例子: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
。【参考方案4】:
为了避免用户从不同来源连接时重复:
select distinct User from mysql.user;
【讨论】:
【参考方案5】: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 |
| | % |
+------------------+-----------+
【讨论】:
【参考方案6】:如果您指的是实际的 MySQL 用户,请尝试:
select User from mysql.user;
【讨论】:
【参考方案7】:SELECT * FROM mysql.user;
这是一张大表,因此您可能希望对选择的字段更有选择性。
【讨论】:
我有 3 个不同主机的 root 用户。localhost
、127.0.0.1
和 ::1
。哪些必须保留,哪些必须删除?谢谢!
如果您不希望人们通过网络连接,旧标准是删除所有这些。但是,如今,似乎建议保留 localhost ,因为无论如何它们都无法通过网络访问;这意味着您应该改为保留所有这些。【参考方案8】:
以 root 身份登录 MySQL 并输入以下查询:
select User from mysql.user;
+------+
| User |
+------+
| amon |
| root |
| root |
+------+
【讨论】:
我会说 +1 提到以 root 身份登录。我试过不这样做,但没有用;) 您需要授予 user1 权限才能显示用户列表。如果没有 root 用户,您将收到错误消息。所以首先提供权限。以 root 用户身份登录,然后输入命令GRANT SELECT ON mysql.user TO 'user1'@'localhost';
现在以 user1 身份登录并输入命令 select User from mysql.user;
您将看到显示的用户列表。 :) +1 享受【参考方案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...
【讨论】:
在我看来,重要的是允许用户在数据库上做什么。所以“SHOW GRANTS”非常有用,因为它显示了谁可以做什么。【参考方案10】:我使用它来对用户进行排序,因此允许的主机更容易发现:
mysql> SELECT User,Host FROM mysql.user ORDER BY User,Host;
【讨论】:
【参考方案11】:Peter 和 Jesse 是正确的,但请确保您首先选择“mysql”数据库。
use mysql;
select User from mysql.user;
这应该可以解决问题。
【讨论】:
use mysql;
不必像以前那样将表范围限定为 mysql 数据库。你可以select User from mysql.user;
添加use mysql;
只是为了你可以使用select User from user;
而不是select User from mysql.user;
,因为它通常是一次性查询,不需要使用mysql db
在use mysql
之后,如果您使用了select user from user;
,那么这可能是一些事情,但是您使用的是mysql.user
,这使得在开始时使用use mysql
是不必要的。【参考方案12】:
这会显示唯一用户列表:
SELECT DISTINCT User FROM mysql.user;
【讨论】:
【参考方案13】:$> mysql -u root -p -e 'Select user from mysql.user' > allUsersOnDatabase.txt
在 Linux 命令行提示符下执行此命令将首先询问 MySQL root 用户的密码。提供正确密码后,它会将所有数据库用户打印到文本文件中。
【讨论】:
【参考方案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;
【讨论】:
什么是“DML”和“DDL”?你能链接到(特定的)上下文吗?【参考方案15】:SELECT User FROM mysql.user;
使用上述查询获取 MySQL 用户。
【讨论】:
以上是关于如何使用 MySQL 中的命令行获取用户帐户列表?的主要内容,如果未能解决你的问题,请参考以下文章