【问题标题】:How can I get a list of user accounts using the command line in MySQL?如何使用 MySQL 中的命令行获取用户帐户列表?
【发布时间】:2010-11-11 05:42:37
【问题描述】:

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

我使用的是 MySQL 5.4.1 版。

【问题讨论】:

  • @Mustapha 为什么标题变了?这里的答案是您可以从任何地方运行的 SQL,而不仅仅是命令行。这个标签给问题添加了什么?
  • 我编辑的目的是保持标题和描述之间的一致性,但我认为你的观点很好。进行编辑@Rup 先生

标签: mysql command-line mysql5


【解决方案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 用户。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2015-08-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-08-02
                相关资源
                最近更新 更多