#REVOKE

# 通用描述

REVOKE用于对某一用户或角色收回授予其的权限,权限内容包括:

收回授予给用户上的权限立即生效。

收回授予给角色上的权限立即生效,如该角色已被授权给某个用户,则该用户的权限收回也立即生效。

回收授予给用户或角色的角色在用户再次连接时生效,即回收用户A的角色B,回收前已登录的用户A依然拥有B角色,A用户再次登录时失去B角色。

普通用户只能收回自己授予的权限,即使对于指定了WITH GRANT|ADMIN OPTION语句实现跨用户授权的场景,也不能跨用户收回权限。拥有SECURITY_ADMIN安全管理员角色的用户可收回任何权限。

YashanDB支持在单机/集群部署中回收授予给角色的角色,在分布式部署形态中执行此操作返回错误。

YashanDB的权限体系管理具体描述请查看权限管理

# 语句定义

revoke::=

syntax
revoke_object_privilege revoke_system_privilege revoke_role_privilege

revoke_object_privilege::=

syntax
REVOKE object_privilege ALL PRIVILEGES ON schema . table_name FROM user role

revoke_system_privilege::=

syntax
REVOKE system_privilege ALL PRIVILEGES FROM user role

revoke_role_privilege::=

syntax
REVOKE role FROM user role

# revoke_object_privilege

该语句用于将指定的对象级权限从用户/角色收回,如指定ALL PRIVILEGES表示收回所有对象级权限。

  • 若打开三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色的用户收回。
  • 若关闭三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色或拥有DBA角色的用户收回。
  • 如某个普通用户通过WITH ADMIN OPTION语句被授予了权限,那么此用户可以收回自己授予给其他用户的权限。
  • 可以通过拥有GRANT ANY OBJECT PRIVILEGE系统级权限的普通用户收回。

# table_name|user_name|role

对象|用户|角色名称。

示例

--在用户ya_user1下收回其授予给ya_user2的SELECT ON ya_table TO ya_user2 WITH GRANT OPTION权限,而ya_user3的权限只能由ya_user2或系统用户收回
REVOKE SELECT ON ya_table FROM ya_user2;

# revoke_system_privilege

该语句用于将指定的系统级权限从用户/角色收回,如指定ALL PRIVILEGES表示收回所有系统级权限。

  • 若打开三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色的用户收回。
  • 若关闭三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色或拥有DBA角色的用户收回。
  • 如某个普通用户通过WITH ADMIN OPTION语句被授予了权限,那么此用户可以收回自己授予给其他用户的权限。
  • 可以通过拥有GRANT ANY PRIVILEGE系统级权限的普通用户收回。

# user_name|role

用户|角色名称。

示例

--在系统用户下将授予ya_user1用户的ALTER SYSTEM权限收回
REVOKE ALTER SYSTEM FROM ya_user1;

# revoke_role_privilege

该语句用于将指定的角色权限从用户/角色收回。

  • 若打开三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色的用户收回。
  • 若关闭三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色或拥有DBA角色的用户收回。
  • 可以通过拥有GRANT ANY ROLE的系统级权限的普通用户收回。 示例
--在用户ya_user1下收回其授予给ya_user2的ya_rol1角色权限
REVOKE ya_rol1 FROM ya_user2;