查看角色
您可以查看用户激活的角色有哪些,角色中又有哪些角色,还可以查看角色中有哪些权限。
查看用户被授予的角色和权限
用户可以始终使用直接被授予的权限,但不一定可以使用通过角色间接获得的权限,用户只能使用在当前会话中被激活的角色的权限。
查看用户 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。