如何使用 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 用户。 localhost127.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 中的命令行获取用户帐户列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 win32 api 获取域用户帐户列表?

如何从 HSQL 获取用户帐户列表?

如何从命令行使用受限用户帐户更新 Azure 上的云服务

怎么退出mysql命令行

如何在没有管理员帐户的情况下通过 REST 获取 Keycloak 用户

如何使用 JavaMail 获取邮件帐户中可用文件夹的列表