我知道我可以通过以下简单的方式设置用户权限:
grant all on [database name].[table name] to [user name]@[host name];
但是我如何才能查看现有的权限?
我需要查看类似于授权中使用的数据。换句话说,我想知道给定用户对给定主机上的给定数据库的给定表具有给定访问权限。
我怎么才能得到它?
答案1
该命令SHOW GRANTS [FOR user]
就是您要找的。请参阅显示赠款声明部分以了解更多详细信息。
答案2
这里是MySQL 文档为了SHOW GRANTS
:
SHOW GRANTS [FOR user]
此语句列出了必须发出的 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 |
+---------------------------------------------------------------------+
要列出授予您用于连接服务器的帐户的权限,您可以使用以下任一语句:
SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER;
SHOW GRANTS FOR CURRENT_USER();
从 MySQL 5.0.24 开始,如果在 DEFINER 上下文中使用 SHOW GRANTS FOR CURRENT_USER(或任何等效语法),例如在使用 SQL SECURITY DEFINER 定义的存储过程内,则显示的授权是定义者的授权,而不是调用者的授权。
SHOW GRANTS 仅显示明确授予指定帐户的权限。该帐户可能还拥有其他权限,但这些权限不会显示出来。例如,如果存在匿名帐户,则指定帐户可能能够使用其权限,但 SHOW GRANTS 不会显示这些权限。
SHOW GRANTS 需要 mysql 数据库的 SELECT 权限。
答案3
显示补助金工作正常,但如果您需要知道用户是否有来自特定 IP /域的特殊访问权限,更好的命令是:
select * from information_schema.user_privileges where grantee like '%username%';
有时,您可以随意创建像 username@localhost 这样的用户,上面的命令可以帮助您发现这些陷阱。