如何在 MySQL 中显示用户的权限?

Rom*_*man 107 mysql permissions users

我知道我可以通过以下简单的方式设置用户的权限:

grant all on [database name].[table name] to [user name]@[host name];
Run Code Online (Sandbox Code Playgroud)

但是我怎么能看到现有的特权呢?

我需要查看与授权中使用的数据类似的数据。换句话说,我想知道给定的用户可以从给定的主机访问给定数据库的给定表。

我怎么才能得到它?

Joh*_*ers 114

该命令SHOW GRANTS [FOR user]就是您要查找的内容。有关更多详细信息,请参见此处


小智 73

下面是MySQL文档SHOW GRANTS

SHOW GRANTS [FOR user]
Run Code Online (Sandbox Code Playgroud)

此语句列出了必须发出的 GRANT 语句或语句,以复制授予 MySQL 用户帐户的权限。该帐户使用与 GRANT 语句相同的格式命名;例如,'jeffrey'@'localhost'。如果您仅指定帐户名的用户名部分,则使用“%”的主机名部分。有关指定帐户名称的其他信息,请参阅第 12.5.1.3 节,“GRANT 语法”。

mysql> SHOW GRANTS FOR 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

要列出授予用于连接服务器的帐户的权限,您可以使用以下任何语句:

SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER;
SHOW GRANTS FOR CURRENT_USER();
Run Code Online (Sandbox Code Playgroud)

从 MySQL 5.0.24 开始,如果在 DEFINER 上下文中使用 SHOW GRANTS FOR CURRENT_USER(或任何等效语法),例如在使用 SQL SECURITY DEFINER 定义的存储过程中),则显示的授权是定义者和不是调用者。

SHOW GRANTS 仅显示明确授予指定帐户的权限。该帐户可能具有其他权限,但不会显示这些权限。例如,如果存在匿名帐户,命名帐户可能能够使用其权限,但 SHOW GRANTS 不会显示它们。

SHOW GRANTS 需要 mysql 数据库的 SELECT 权限。