#REVOKE
# 通用描述
REVOKE用于对某一用户或角色收回授予其的权限,权限内容包括:
- 系统权限SYSTEM PRIVILEGE
- 对象特权OBJECT PRIVILEGE
- 角色ROLE
收回授予给用户上的权限立即生效。
收回授予给角色上的权限立即生效,如该角色已被授权给某个用户,则该用户的权限收回也立即生效。
回收授予给用户或角色的角色在用户再次连接时生效,即回收用户A的角色B,回收前已登录的用户A依然拥有B角色,A用户再次登录时失去B角色。
普通用户只能收回自己授予的权限,即使对于指定了WITH GRANT|ADMIN OPTION语句实现跨用户授权的场景,也不能跨用户收回权限。拥有SECURITY_ADMIN安全管理员角色的用户可收回任何权限。
YashanDB支持在单机和共享集群部署中回收授予给角色的角色,在分布式部署中执行此操作返回错误。
YashanDB的权限体系管理具体描述请查看权限管理。
# 语句定义
revoke::=
revoke_object_privilege::=
revoke_system_privilege::=
revoke_role_privilege::=
# revoke_object_privilege
该语句用于将指定的对象特权从用户/角色收回,如指定ALL PRIVILEGES表示收回所有对象特权。
- 若打开三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色的用户收回。
- 若关闭三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色或拥有DBA角色的用户收回。
- 如某个普通用户通过WITH ADMIN OPTION语句被授予了权限,那么此用户可以收回自己授予给其他用户的权限。
- 可以通过拥有GRANT ANY OBJECT PRIVILEGE系统权限的普通用户收回。
# object_name
对象的名称,支持指定为已创建的表或自定义类型。
# user_name|role
用户|角色名称。
示例
-- 在用户sales下将表area的SELECT权限授予sales1用户
GRANT SELECT ON area TO sales1 WITH GRANT OPTION;
-- 此时sales1将拥有表area的SELECT权限,并可以再将此权限授予其他用户
conn sales1/1%2
GRANT SELECT ON sales.area TO sales2;
-- 在用户sales下收回其授予给sales1的SELECT ON area权限
conn sales/sales
REVOKE SELECT ON area FROM sales1;
-- sales2的SELECT ON sales.area权限由sales1授权,因此只能由sales1或系统用户收回
conn sales1/1%2
REVOKE SELECT ON sales.area FROM sales2;
示例(单机、共享集群部署)
-- 在用户sales下收回授予给sales1的EXECUTE ON udt_object权限
REVOKE EXECUTE ON udt_object FROM sales1;
# revoke_system_privilege
该语句用于将指定的系统权限从用户/角色收回,如指定ALL PRIVILEGES表示收回所有系统权限。
- 若打开三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色的用户收回。
- 若关闭三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色或拥有DBA角色的用户收回。
- 如某个普通用户通过WITH ADMIN OPTION语句被授予了权限,那么此用户可以收回自己授予给其他用户的权限。
- 可以通过拥有GRANT ANY PRIVILEGE系统权限的普通用户收回。
# user_name|role
用户|角色名称。
示例
--在系统用户下将授予sales1用户的ALTER SYSTEM权限收回
REVOKE ALTER SYSTEM FROM sales1;
# revoke_role_privilege
该语句用于将指定的角色权限从用户/角色收回。
- 若打开三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色的用户收回。
- 若关闭三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色或拥有DBA角色的用户收回。
- 可以通过拥有GRANT ANY ROLE的系统权限的普通用户收回。
示例
--在用户sales下收回其授予给sales1的ya_rol1角色权限
REVOKE ya_rol1 FROM sales1;