#GRANT

# 通用描述

GRANT用于对某一用户或角色授予权限,权限内容包括:

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

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

YashanDB的权限体系管理具体描述请查看产品安全手册权限管理

# 语句定义

grant::=

syntax
grant_object_privilege grant_system_privilege grant_role_privilege

grant_object_privilege::=

syntax
GRANT object_privilege ALL PRIVILEGES ON schema . table_name TO user_name WITH GRANT OPTION role

grant_system_privilege::=

syntax
GRANT system_privilege ALL PRIVILEGES TO user_name WITH ADMIN OPTION role

grant_role_privilege::=

syntax
GRANT role TO user_name WITH ADMIN OPTION role

# grant_object_privilege

该语句用于对用户或角色授予对象级权限,如指定ALL PRIVILEGES表示授予所有对象级权限。

某个对象的对象级权限应该由其所属用户来授予,此外还有这几种用户可以授予:

  • 若打开三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色的用户授予。
  • 若关闭三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色或拥有DBA角色的用户授予。
  • 可以通过被授权该权限时指定了WITH GRANT OPTION语句的普通用户授予。
  • 可以通过拥有GRANT ANY OBJECT PRIVILEGE系统级权限的普通用户授予。

# object_privilege

对象级权限名称,所有可授权的对象级权限见OBJECT PRIVILEGE中描述。

# table_name|user_name|role

对象|用户|角色名称。

# with grant option

将对象级权限授予某一个用户时,指定本语句表示该用户可以再将拥有的对象级权限授予其他的用户或角色。

示例

--在用户ya_user1下创建表ya_table并将其SELECT权限授予ya_user2用户
GRANT SELECT ON ya_table TO ya_user2 WITH GRANT OPTION;
 
--此时ya_user2将拥有表ya_table的SELECT权限,并可以再将此权限授予ya_user3用户
GRANT SELECT ON ya_user1.ya_table TO ya_user3;

# grant_system_privilege

该语句用于对用户或角色授予系统级权限,如指定ALL PRIVILEGES表示授予所有系统级权限。此外还有这几种用户可以授予:

  • 若打开三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色的用户授予。
  • 若关闭三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色或拥有DBA角色的用户授予。
  • 可以通过被授权该权限时指定了WITH ADMIN OPTION语句的普通用户授予。
  • 可以通过拥有GRANT ANY PRIVILEGE系统级权限的普通用户授予。

# system_privilege

系统级权限名称,所有可授权的系统级权限见SYSTEM PRIVILEGE中描述。

# user_name|role

用户|角色名称。

# with admin option

将系统级权限授予某一个用户时,指定本语句表示该用户拥有了对此权限的管理权限,即可以将该系统级权限再授予给其他用户或角色。

示例

--在系统用户下将ALTER SYSTEM权限授予ya_user1用户
GRANT ALTER SYSTEM TO ya_user1 WITH ADMIN OPTION;
 
--此时ya_user1将拥有ALTER SYSTEM权限,并可以再将此权限授予ya_user2用户
GRANT ALTER SYSTEM TO ya_user2;

# grant_role_privilege

该语句用于对用户或角色授予角色权限。此外还有这几种用户可以授予:

  • 若打开三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色的用户授予。
  • 若关闭三权分立功能,可以通过拥有SECURITY_ADMIN安全管理员角色或拥有DBA角色的用户授予。
  • 可以通过拥有GRANT ANY ROLE的系统级权限的普通用户授予。

# user_name|role

用户|角色名称。

# with admin option

将角色授予某一个用户时,指定本语句表示该用户拥有了对此角色的管理权限,即可以将该角色再授予给其他用户。

Note

授权SYSDBA和SYSOPER角色时,指定WITH ADMIN OPTION无效。

示例

--在用户ya_user1下创建角色ya_rol1并授予其ya_table表的SELECT权限
CREATE ROLE ya_rol1;
GRANT SELECT ON ya_table TO ya_rol1;
 
--将ya_rol1角色权限授予ya_user2用户,则在ya_user2重新连接后,即可以拥有ya_user1.ya_table的SELECT权限。此操作需要ya_user1用户拥有GRANT ANY ROLE权限。
GRANT ya_rol1 TO ya_user2;