有时候,您需要查看某个用户被授予的权限以便复核。
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() 都返回当前用户。
显示授予用户的权限
这个实例演示了创建用户、授予权限、查看权限的完整步骤。
-
CREATE DATABASE sqlizdb; -
选择数据库
sqlizdb:USE sqlizdb; -
在数据库
sqlizdb中新建一个表test_table:CREATE TABLE test_table( id int AUTO_INCREMENT PRIMARY KEY, txt varchar(100) NOT NULL ); -
创建一个新用户,名为
sqliz@'%':CREATE user sqliz@'%' IDENTIFIED by 'SqLiZ9879123!'; -
显示授予用户
sqliz@'%'的默认权限:SHOW GRANTS FOR sqliz@'%';+-----------------------------------+ | Grants for sqliz@% | +-----------------------------------+ | GRANT USAGE ON *.* TO `sqliz`@`%` | +-----------------------------------+GRANT USAGE是没有权限的代名词。默认情况下,当新用户创建时,它没有权限。 -
将
sqlizdb数据库的所有权限授予用户sqliz@'%':GRANT ALL PRIVILEGES ON sqlizdb.* TO sqliz@'%'; -
最后,显示授予用户的权限
sqliz@'%':SHOW GRANTS FOR sqliz@'%';+----------------------------------------------------+ | Grants for sqliz@% | +----------------------------------------------------+ | GRANT USAGE ON *.* TO `sqliz`@`%` | | GRANT ALL PRIVILEGES ON `sqlizdb`.* TO `sqliz`@`%` | +----------------------------------------------------+
显示授予角色的权限
本实例演示了创建角色、授予角色权限、查看角色权限的完整步骤。
-
创建一个新角色,名为
write_role@'%':CREATE ROLE write_role@'%'; -
显示授予角色的权限
write_role@'%':SHOW GRANTS FOR write_role@'%';+----------------------------------------+ | Grants for write_role@% | +----------------------------------------+ | GRANT USAGE ON *.* TO `write_role`@`%` | +----------------------------------------+ -
授予
write_role@'%'在sqlizdb数据库上的SELECT,INSERT,UPDATE,和DELETE权限:GRANT SELECT, INSERT, UPDATE, DELETE ON sqlizdb.* TO write_role@'%'; -
显示授予角色的权限
write_role@'%':SHOW GRANTS FOR write_role@'%';+-------------------------------------------------------------------------+ | Grants for write_role@% | +-------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `write_role`@`%` | | GRANT SELECT, INSERT, UPDATE, DELETE ON `sqlizdb`.* TO `write_role`@`%` | +-------------------------------------------------------------------------+
D) 显示用户与角色关联的权限
本实例演示了创建用户、分配角色、显示权限的详细步骤。
-
创建一个名为
sqliz2@'%'的新用户帐户:CREATE user sqliz2@'%' IDENTIFIED by 'SqLiZ9879123!'; -
授予
EXECUTE权限给用户sqliz2@'%':GRANT EXECUTE ON sqlizdb.* TO sqliz2@'%'; -
将角色
write_role@'%'授予用户sqliz2@'%':GRANT write_role@'%' TO sqliz2@'%'; -
显示授予用户的权限
sqliz2@'%':SHOW GRANTS FOR sqliz2@'%';+----------------------------------------------+ | Grants for sqliz2@% | +----------------------------------------------+ | GRANT USAGE ON *.* TO `sqliz2`@`%` | | GRANT EXECUTE ON `sqlizdb`.* TO `sqliz2`@`%` | | GRANT `write_role`@`%` TO `sqliz2`@`%` | +----------------------------------------------+ -
最后,使用
SHOW GRANTS语句中的USING子句来显示与write_role@'%'角色关联的权限:SHOW GRANTS FOR sqliz2@'%' USING write_role@'%';+------------------------------------------------------------------------------+ | Grants for sqliz2@% | +------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `sqliz2`@`%` | | GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `sqlizdb`.* TO `sqliz2`@`%` | | GRANT `write_role`@`%` TO `sqliz2`@`%` | +------------------------------------------------------------------------------+
结论
在 MySQL 中,您可以使用 SHOW GRANTS 语句显示授予用户或角色的权限。