在 MySQL 中使用 SHOW GRANTS 语句显示用户的权限
有时候,您需要查看某个用户被授予的权限以便复核。
MySQL 允许您使用 SHOW GRANTS
语句来显示分配给用户帐户或角色的权限。
MySQL SHOW GRANTS
语句介绍
以下是 SHOW GRANTS
语句的基本语法:
SHOW GRANTS
[FOR {user | role}
[USING role [, role] ...]]
在这个语法中:
- 首先,在
FOR
关键字后指定要显示先前授予用户帐户或角色的权限的用户帐户或角色的名称。如果跳过FOR
子句,则SHOW GRANTS
返回当前用户的权限。 - 其次,使用
USING
子句检查与用户角色相关的权限。您在USING
子句中指定的角色必须事先授予用户。
除了可以显示当前用户的权限和角色,要执行 SHOW GRANTS
的语句,你需要有 mysql
系统数据库的 SELECT
权限。
MySQL SHOW GRANTS
实例
让我们举一些使用 MySQL SHOW GRANTS
语句的例子。
显示授予当前用户的权限
以下语句使用 SHOW GRANTS
语句显示授予当前用户的权限:
SHOW GRANTS;
它等效于以下语句:
SHOW GRANTS FOR CURRENT_USER;
和
SHOW GRANTS FOR CURRENT_USER();
CURRENT_USER
和 CURRENT_USER()
都返回当前用户。
显示授予用户的权限
这个实例演示了创建用户、授予权限、查看权限的完整步骤。
-
创建一个名为
sqlizdb
的新数据库:CREATE DATABASE sqlizdb;
-
选择数据库
sqlizdb
:USE sqlizdb;
-
在数据库
sqlizdb
中新建一个表test_table
:CREATE TABLE test_table( id int AUTO_INCREMENT PRIMARY KEY, txt varchar(100) NOT NULL );
-
创建一个新用户,名为
[email protected]'%'
:CREATE user sqliz@'%' IDENTIFIED by 'SqLiZ9879123!';
-
显示授予用户
[email protected]'%'
的默认权限:SHOW GRANTS FOR sqliz@'%';
+-----------------------------------+ | Grants for [email protected]% | +-----------------------------------+ | GRANT USAGE ON *.* TO `sqliz`@`%` | +-----------------------------------+
GRANT USAGE
是没有权限的代名词。默认情况下,当新用户创建时,它没有权限。 -
将
sqlizdb
数据库的所有权限授予用户[email protected]'%'
:GRANT ALL PRIVILEGES ON sqlizdb.* TO sqliz@'%';
-
最后,显示授予用户的权限
[email protected]'%'
:SHOW GRANTS FOR sqliz@'%';
+----------------------------------------------------+ | Grants for [email protected]% | +----------------------------------------------------+ | GRANT USAGE ON *.* TO `sqliz`@`%` | | GRANT ALL PRIVILEGES ON `sqlizdb`.* TO `sqliz`@`%` | +----------------------------------------------------+
显示授予角色的权限
本实例演示了创建角色、授予角色权限、查看角色权限的完整步骤。
-
创建一个新角色,名为
[email protected]'%'
:CREATE ROLE write_role@'%';
-
显示授予角色的权限
[email protected]'%'
:SHOW GRANTS FOR write_role@'%';
+----------------------------------------+ | Grants for [email protected]% | +----------------------------------------+ | GRANT USAGE ON *.* TO `write_role`@`%` | +----------------------------------------+
-
授予
[email protected]'%'
在sqlizdb
数据库上的SELECT
,INSERT
,UPDATE
,和DELETE
权限:GRANT SELECT, INSERT, UPDATE, DELETE ON sqlizdb.* TO write_role@'%';
-
显示授予角色的权限
[email protected]'%'
:SHOW GRANTS FOR write_role@'%';
+-------------------------------------------------------------------------+ | Grants for [email protected]% | +-------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `write_role`@`%` | | GRANT SELECT, INSERT, UPDATE, DELETE ON `sqlizdb`.* TO `write_role`@`%` | +-------------------------------------------------------------------------+
D) 显示用户与角色关联的权限
本实例演示了创建用户、分配角色、显示权限的详细步骤。
-
创建一个名为
[email protected]'%'
的新用户帐户:CREATE user sqliz2@'%' IDENTIFIED by 'SqLiZ9879123!';
-
授予
EXECUTE
权限给用户[email protected]'%'
:GRANT EXECUTE ON sqlizdb.* TO sqliz2@'%';
-
将角色
[email protected]'%'
授予用户[email protected]'%'
:GRANT write_role@'%' TO sqliz2@'%';
-
显示授予用户的权限
[email protected]'%'
:SHOW GRANTS FOR sqliz2@'%';
+----------------------------------------------+ | Grants for [email protected]% | +----------------------------------------------+ | GRANT USAGE ON *.* TO `sqliz2`@`%` | | GRANT EXECUTE ON `sqlizdb`.* TO `sqliz2`@`%` | | GRANT `write_role`@`%` TO `sqliz2`@`%` | +----------------------------------------------+
-
最后,使用
SHOW GRANTS
语句中的USING
子句来显示与[email protected]'%'
角色关联的权限:SHOW GRANTS FOR sqliz2@'%' USING write_role@'%';
+------------------------------------------------------------------------------+ | Grants for [email protected]% | +------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `sqliz2`@`%` | | GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `sqlizdb`.* TO `sqliz2`@`%` | | GRANT `write_role`@`%` TO `sqliz2`@`%` | +------------------------------------------------------------------------------+
结论
在 MySQL 中,您可以使用 SHOW GRANTS
语句显示授予用户或角色的权限。