间接授权
用户的权限,包含直接授予的权限,也包含授予角色后,通过角色间接获得的权限。大部分操作需要的权限,不论是直接授予的还是通过角色间接拥有的权限,都可以满足条件。
通过被授予角色间接获得权限
通过将角色授予用户或用户的其他角色,被授予了角色的用户就会间接获得该角色所包含的权限。
用户可以始终使用直接被授予的权限,但不一定可以使用通过角色间接获得的权限,用户只能使用在当前会话中被激活的角色的权限。有关激活角色的详细操作,请参见 激活角色。
前提条件
将角色授予其他用户或角色时,当前用户必须拥有被授予的角色,并且拥有 ADMIN OPTION 权限,才能授权成功。查看当前用户所拥有的权限的相关操作请参见 查看用户权限。
背景信息
假设当前有一个用户 test1,并且其已经被授予了一个角色 employee。查看 employee 角色包含的权限,语句如下:
SHOW GRANTS FOR employee;
结果如下:
+--------------------------------------------------+
| Grants for employee@% |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'employee' |
| GRANT UPDATE, SELECT ON `dbtest`.* TO 'employee' |
+--------------------------------------------------+
2 rows in set
当前用户有一个 developer 角色,查看 developer 角色包含的权限,语句如下:
SHOW GRANTS FOR developer;
结果如下:
+------------------------------------------+
| Grants for developer@% |
+------------------------------------------+
| GRANT ALTER SYSTEM ON *.* TO 'developer' |
+------------------------------------------+
1 row in set
操作示例
现在需要将角色 developer 中所有操作权限授予用户 test1,您可以通过以下方式来实现间接授权:
-
将角色授予用户
-
当前用户将角色
developer授予用户test1。GRANT developer TO test1;如果希望用户后续可以转授该角色,可以添加
WITH ADMIN OPTION子句。GRANT developer TO test1 WITH ADMIN OPTION; -
通过
SHOW GRANTS ... USING语句查看用户通过developer获得的权限。SHOW GRANTS FOR test1 USING developer;结果如下:
+-----------------------------------------------------+
| Grants for test1@% |
+-----------------------------------------------------+
| GRANT ALTER SYSTEM ON *.* TO 'test1' |
| GRANT `developer`@`%`,`employee`@`%` TO `test1`@`%` |
+-----------------------------------------------------+
2 rows in set
-
-
将角色授予用户的角色
-
将角色
developer授予角色employee.GRANT developer TO employee; -
可以通过
SHOW GRANTS ... USING语句查看用户test1通过employee获得的权限。SHOW GRANTS FOR test1 USING employee;结果如下:
+-----------------------------------------------+
| Grants for test1@% |
+-----------------------------------------------+
| GRANT ALTER SYSTEM ON *.* TO 'test1' |
| GRANT UPDATE, SELECT ON `dbtest`.* TO 'test1' |
| GRANT `employee`@`%` TO `test1`@`%` |
+-----------------------------------------------+
3 rows in set根据查询结果可知,用户
test1通过employee角色获得了ALTER SYSTEM权限,再查看employee被授予的角色或权限。SHOW GRANTS FOR employee;结果如下,可以看出,
ALTER SYSTEM权限是通过developer角色获得。+--------------------------------------------------+
| Grants for employee@% |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'employee' |
| GRANT UPDATE, SELECT ON `dbtest`.* TO 'employee' |
| GRANT `developer`@`%` TO `employee`@`%` |
+--------------------------------------------------+
3 rows in set
-
相关文档
有关角色相关的更多操作,请参见 角色管理。