首批通过分布式安全可靠测评,为关键业务系统打造
间接授权
更新时间:2026-04-05 11:29:06
用户的权限,包含直接授予的权限,也包含授予角色后,通过角色间接获得的权限。大部分操作需要的权限,不论是直接授予的还是通过角色间接拥有的权限,都可以满足条件。
通过被授予角色间接获得权限
通过将角色授予用户或用户的其他角色,被授予了角色的用户就会间接获得该角色所包含的权限。
注意
用户可以始终使用直接被授予的权限,但不一定可以使用通过角色间接获得的权限,用户只能使用在当前会话中被激活的角色的权限。有关激活角色的详细操作,请参见 激活角色。
前提条件
将角色授予其他用户或角色时,当前用户必须拥有被授予的角色,并且拥有 ADMIN OPTION 权限,才能授权成功。查看当前用户所拥有的权限的相关操作请参见 查看用户权限。
背景信息
假设当前有一个用户 test1,并且其已经被授予了一个角色 employee。查看 employee 角色包含的权限,语句如下:
obclient [oceanbase]> 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 角色包含的权限,语句如下:
obclient [oceanbase]> SHOW GRANTS FOR developer;
结果如下:
+------------------------------------------+
| Grants for developer@% |
+------------------------------------------+
| GRANT ALTER SYSTEM ON *.* TO 'developer' |
+------------------------------------------+
1 row in set
操作示例
现在需要将角色 developer 中所有操作权限授予用户 test1,您可以通过以下方式来实现间接授权:
将角色授予用户
当前用户将角色
developer授予用户test1。obclient [oceanbase]> GRANT developer TO test1;如果希望用户后续可以转授该角色,可以添加
WITH ADMIN OPTION子句。obclient [oceanbase]> GRANT developer TO test1 WITH ADMIN OPTION;通过
SHOW GRANTS ... USING语句查看用户通过developer获得的权限。obclient [oceanbase]> 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.obclient [oceanbase]> GRANT developer TO employee;可以通过
SHOW GRANTS ... USING语句查看用户test1通过employee获得的权限。obclient [oceanbase]> 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被授予的角色或权限。obclient [(none)]> 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
相关文档
有关角色相关的更多操作,请参见 角色管理。