查看角色
您可以查看用户激活的角色有哪些,角色中又有哪些角色,还可以查看角色中有哪些权限。
查看用户被授予的角色和权限
用户可以始终使用直接被授予的权限,但不一定可以使用通过角色间接获得的权限,用户只能使用在当前会话中被激活的角色的权限。
查看用户 test1 被授予的角色和权限,语句如下:
SHOW GRANTS FOR test1;
查询结果如下:
+-------------------------------------------------+
| Grants for test1@% |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO 'test1' |
| GRANT `employee`@`%`,`role1`@`%` TO `test1`@`%` |
+-------------------------------------------------+
2 rows in set
对于用户被授予的角色,如果希望进一步展示角色所包含的权限,可以添加一个 USING 子句,指定展示该角色所包含的权限。
SHOW GRANTS FOR test1 USING role1;
结果如下:
+-------------------------------------------------+
| Grants for test1@% |
+-------------------------------------------------+
| GRANT ALTER SYSTEM ON *.* TO 'test1' |
| GRANT UPDATE, SELECT ON `dbtest`.* TO 'test1' |
| GRANT `employee`@`%`,`role1`@`%` TO `test1`@`%` |
+-------------------------------------------------+
3 rows in set
查看角色被授予的角色或权限
查看角色 role1 被授予的角色或权限。
SHOW GRANTS FOR role1;
查询结果如下:
+-------------------------------------------------------+
| Grants for role1@% |
+-------------------------------------------------------+
| GRANT ALTER SYSTEM ON *.* TO 'role1' |
| GRANT SELECT ON `dbtest`.* TO 'role1' |
| GRANT SELECT ON `test1`.`tbl1` TO 'role1' |
| GRANT `employee`@`%` TO `role1`@`%` WITH ADMIN OPTION |
+-------------------------------------------------------+
4 rows in set
查看用户登录时默认激活的角色
通过 Global 变量 activate_all_roles_on_login 启用了登录时自动激活用户被授予的所有角色,或者通过 SET DEFAULT ROLE 语句或 ALTER USER 语句设置了登录时默认激活的角色后,可以查询 mysql.default_roles 视图,确认用户登录默认激活的角色是否设置正确。
SELECT * FROM mysql.default_roles;
结果如下:
+------+-------+-------------------+-------------------+
| HOST | USER | DEFAULT_ROLE_HOST | DEFAULT_ROLE_USER |
+------+-------+-------------------+-------------------+
| % | test1 | % | role1 |
| % | test1 | % | employee |
+------+-------+-------------------+-------------------+
2 rows in set
有关视图 mysql.default_roles 各字段的详细说明,请参见 mysql.default_roles。
查看当前会话中被激活的角色
查看当前用户在当前会话中被激活的角色,语句如下:
SELECT current_role();
查询结果如下:
+--------------------------------+
| current_role() |
+--------------------------------+
| `developer`@`%`,`employee`@`%` |
+--------------------------------+
1 row in set
如果查询结果为 NONE,则表示当前用户没有处于激活状态的角色,只有处于激活状态的角色的权限才能被用户使用。
查看角色与用户之间的授权关系
SELECT * FROM mysql.role_edges;
查询结果如下:
+-----------+-----------+---------+---------+-------------------+
| FROM_HOST | FROM_USER | TO_HOST | TO_USER | WITH_ADMIN_OPTION |
+-----------+-----------+---------+---------+-------------------+
| % | employee | % | test2 | Y |
| % | employee | % | role1 | Y |
| % | developer | % | test1 | N |
+-----------+-----------+---------+---------+-------------------+
3 rows in set
上述查询结果中:
-
第一行表示
employee角色将其所有权限授予了test2用户,同时允许test2用户将该角色转授给其他用户或角色。 -
第二行表示
employee角色将其所有权限授予了role1角色,同时允许role1角色将该角色转授给其他用户或角色。 -
第三行表示
developer角色将其所有权限授予了test1用户,并且test1用户不能将该角色转授给其他用户或角色。
有关视图 mysql.role_edges 各字段的详细说明,请参见 mysql.role_edges。
查看当前激活角色的表级权限
查看用户在当前会话中被授予的已激活的角色的表级权限信息,以及这些角色被授予的其他角色的表级权限信息,语句如下:
SELECT * FROM information_schema.role_table_grants;
查询结果如下:
+---------+--------------+-----------+--------------+---------------+--------------+------------+--------------------+--------------+
| GRANTOR | GRANTOR_HOST | GRANTEE | GRANTEE_HOST | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | PRIVILEGE_TYPE | IS_GRANTABLE |
+---------+--------------+-----------+--------------+---------------+--------------+------------+--------------------+--------------+
| root | % | developer | % | def | test | tbl2 | Drop,Update,Select | NO |
+---------+--------------+-----------+--------------+---------------+--------------+------------+--------------------+--------------+
1 row in set
查询结果表示,root 用户将表 test.tbl2 的 Drop、Update、Select 等权限授予了角色 developer。
有关视图 role_table_grants 各字段的详细说明,请参见 information_schema.role_table_grants。
查看当前激活角色的列权限
查看用户在当前会话中被授予的已激活的角色的列权限信息,以及这些角色被授予的其他角色的列权限信息,语句如下:
SELECT * FROM information_schema.role_column_grants;
查询结果如下:
+---------+--------------+----------+--------------+---------------+--------------+------------+-------------+----------------+--------------+
| GRANTOR | GRANTOR_HOST | GRANTEE | GRANTEE_HOST | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | PRIVILEGE_TYPE | IS_GRANTABLE |
+---------+--------------+----------+--------------+---------------+--------------+------------+-------------+----------------+--------------+
| NULL | NULL | employee | % | def | test | tbl1 | c1 | Select,Insert | NO |
| NULL | NULL | employee | % | def | test | tbl1 | c2 | Insert | NO |
+---------+--------------+----------+--------------+---------------+--------------+------------+-------------+----------------+--------------+
2 rows in set
上述查询结果中:
- 第一行表示
employee角色对表test.tbl1中的列c1拥有Select、Insert权限。 - 第二行表示
employee角色对表test.tbl1中的列c2拥有Insert权限。
有关视图 role_column_grants 各字段的详细说明,请参见 information_schema.role_column_grants。
查看当前激活角色的例程权限
查看用户在当前会话 中被授予的已激活的角色的例程权限信息,以及这些角色被授予的其他角色的例程权限信息,语句如下:
SELECT * FROM information_schema.role_routine_grants;
上述查询结果如下:
+---------+--------------+-----------+--------------+------------------+-----------------+---------------+-----------------+----------------+--------------+-----------------------+--------------+
| GRANTOR | GRANTOR_HOST | GRANTEE | GRANTEE_HOST | SPECIFIC_CATALOG | SPECIFIC_SCHEMA | SPECIFIC_NAME | ROUTINE_CATALOG | ROUTINE_SCHEMA | ROUTINE_NAME | PRIVILEGE_TYPE | IS_GRANTABLE |
+---------+--------------+-----------+--------------+------------------+-----------------+---------------+-----------------+----------------+--------------+-----------------------+--------------+
| root | % | developer | % | def | test | add_numbers | def | test | add_numbers | Execute,Alter Routine | NO |
+---------+--------------+-----------+--------------+------------------+-----------------+---------------+-----------------+----------------+--------------+-----------------------+--------------+
1 row in set
查询结果表示,root 用户将例程 test.add_numbers 的 Execute、Alter Routine 等权限授予了角色 developer。
有关视图 role_routine_grants 各字段的详细说明,请参见 information_schema.role_routine_grants。