如何在MySQL中显示/列出用户

时间:2020-03-05 15:30:23  来源:igfitidea点击:

我们是否曾经需要获取MySQL服务器中所有用户的列表?
有显示数据库和表的命令,但是没有MySQL“ show users”命令。

本教程说明了如何通过命令行列出MySQL数据库服务器中的所有用户帐户。
我们还将向我们展示如何找出哪些用户可以访问给定的数据库。

在你开始之前

我们假设我们已经在系统上安装了MySQL或者MariaDB服务器。

所有命令均以root用户身份在MySQL Shell中执行。
要访问MySQL Shell,请键入以下命令,并在出现提示时输入MySQL root用户密码:

mysql -u root -p

如果我们尚未为MySQL超级用户设置密码,则可以忽略“ -p”选项。

如果我们忘记了MySQL的root密码,则可以按照以下说明进行重置。

显示所有MySQL用户

MySQL将有关用户的信息存储在“ mysql”数据库中名为“ user”的表中。

要获取所有MySQL用户帐户的列表,请使用'SELECT'语句从'mysql.users'表中检索所有行:

SELECT User, Host FROM mysql.user;

输出应类似于以下内容:

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | localhost |
| luke             | %         |
| yoda             | %         |
| jabba            | 10.10.0.6 |
| jabba            | 10.10.0.9 |
| chewbacca        | localhost |
| leia             | localhost |
| han              | localhost |
+------------------+-----------+
8 rows in set (0.00 sec)

上面的命令仅显示“ mysql.user”表中的两列(“ User”和“ Host”),该表包含40多个列,例如“ Password”,“ Select_priv”,“ Update_priv”等。

MySQL中的用户帐户由两部分组成:用户名和主机名。

使用“ desc mysql.user;”语句以显示有关表列的信息。
一旦知道了列名,就可以对所选数据运行查询。

例如,要获取所有MySQL用户帐户的列表,包括有关密码以及该密码是活动密码还是过期密码的信息,可以使用以下查询:

SELECT User, Host, Password, password_expired FROM mysql.user;
+----------------+-----------+-------------------------------------------+------------------+
| User           | Host      | Password                                  | password_expired |
+----------------+-----------+-------------------------------------------+------------------+
| root           | localhost |                                           | N                |
| luke           | %         | *ADC3B5B27617732CD6320A2DA976258E149A7EC8 | N                |
| yoda           | %         | *9550E004046348198A143A115550E1262209FB6F | N                |
| jabba          | 10.10.0.6 | *F91C86B486B945C083B61A05FF6E197560D187EC | Y                |
| jabba          | 10.10.0.9 |                                           | Y                |
| chewbacca      | localhost | *17F2B1E48029294841AD66772BEBB7E6E6A005AF | N                |
| leia           | localhost | *74409C8DB55AC1A6829D801915981C46EDBFC64A | N                |
| han            | localhost | *7B3022FCAEC3534CE67C68322D8AF0C240D95745 | N                |
+----------------+-----------+-------------------------------------------+------------------+
8 rows in set (0.00 sec)

显示有权访问特定数据库的用户

有关数据库级特权的信息存储在“ mysql.db”表中。

我们可以查询该表以找出哪些用户有权访问给定的数据库以及特权级别。

例如,要获得对名为“ db_name”的数据库具有一定级别访问权限的所有用户的列表,可以使用以下查询:

SELECT * FROM mysql.db WHERE Db = 'db_name'\G;
*** 1. row ***
                 Host: localhost
                   Db: db_name
                 User: db_user
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: Y
         Execute_priv: Y
           Event_priv: Y
         Trigger_priv: Y
1 row in set (0.00 sec)

要仅获取有关可以访问给定数据库的用户帐户的信息,而不显示特权,请使用:

SELECT db, host, user FROM mysql.db WHERE db = 'db_name'
+---------+-----------+---------+
| db      | host      | user    |
+---------+-----------+---------+
| db_name | localhost | db_user |
+---------+-----------+---------+

以下查询将向我们显示有关所有数据库和关联用户的信息:

SELECT db, host, user FROM mysql.db;
+------------------+-----------+-----------+
| db               | host      | user      |
+------------------+-----------+-----------+
| db_name          | localhost | db_user   |
| ghost_production | localhost | chewbacca |
| blog_db          | localhost | leia      |
| theitroad         | localhost | han       |
+------------------+-----------+-----------+