GRANT(序列特权)语句

这种格式的 GRANT 语句授予序列上的特权。

调用

此语句可以嵌入在应用程序中,也可通过动态 SQL 语句来发出。 它是一个可执行语句,仅当 DYNAMICRULES 运行行为对于程序包有效时才能动态编译 (SQLSTATE 42509)。

授权

语句授权标识所拥有的特权必须至少包括下列其中一项权限:
  • sequence-name 上的每种所识别特权的 WITH GRANT OPTION
  • 对于包含 sequence-name 的模式的 ACCESSCTRL 权限
  • ACCESSCTRL 或 SECADM 权限

语法

Read syntax diagramSkip visual syntax diagramGRANT,USAGEALTERON SEQUENCEsequence-nameTO ,USERGROUPROLEauthorization-namePUBLIC WITH GRANT OPTION

描述

用法
授予使用 nextval-expressionprevval-expression 来引用序列的特权。
ALTER
授予使用 ALTER SEQUENCE 语句来变更序列属性的特权。
ON SEQUENCE 序列名称
识别要在其上授予所指定特权的序列。 序列名称(包括隐式或显式的模式限定符)必须唯一地识别当前服务器上的现有序列。 如果不存在此名称的任何序列,那么会返回错误 (SQLSTATE 42704)。
TO
指定要将所指定特权授予哪个对象。
用户
指定 authorization-name 识别用户。
GROUP
指定 authorization-name 识别组名。
角色
指定 authorization-name 识别角色名称。 该角色名称必须存在于当前服务器上 (SQLSTATE 42704)。
授权名称
列示一个或多个用户、组或角色的授权标识。
PUBLIC
将指定的特权授予一组用户(授权标识)。
WITH GRANT OPTION
允许指定的 authorization-name 将所指定特权授予其他用户。
如果省略 WITH GRANT OPTION,那么只有在下列情况下,指定的 authorization-name 才能将指定的特权授予其他用户:
  • 他们具有 SYSADM 或 DBADM 权限,或者
  • 他们已获得从另外其他来源授予所指定特权的能力。

规则

  • 对于每个指定的 authorization-name,如果 USER、GROUP 或 ROLE 均未指定,那么:
    • 如果对实例有效的安全插件无法确定 authorization-name 的状态,那么会返回错误 (SQLSTATE 56092)。
    • 如果 authorization-name 在数据库中定义为 ROLE,并根据有效的安全插件定义为 GROUP 或 USER,那么会返回错误 (SQLSTATE 56092)。
    • 如果 authorization-name 根据有效的安全插件同时定义为 USER 和 GROUP,那么会返回错误 (SQLSTATE 56092)。
    • 如果 authorization-name 根据有效的安全插件仅定义为 USER,或者未定义,那么假定为 USER。
    • 如果 authorization-name 根据有效的安全插件仅定义为 GROUP,那么假定为 GROUP。
    • 如果 authorization-name 在数据库中仅定义为 ROLE,那么假定为 ROLE。
  • 通常,GRANT 语句会处理语句授权标识有权授予的特权的授予,并在未授予一项或多项特权时返回警告 (SQLSTATE 01007)。 如果未授予任何特权,那么会返回错误 (SQLSTATE 42501)。 (如果用于处理该语句的程序包已在 LANGLEVEL 设置为 SQL92E 或 MIA 的情况下进行预编译,那么将返回警告 (SQLSTATE 01007),除非授予者对授予操作的对象不具有任何特权。)

注意

  • 授予组的特权:授予组的特权不用于下列各项的授权检查:
    • 程序包中的静态 DML 语句
    • 处理 CREATE VIEW 语句时的基本表
    • 针对具体化查询表来处理 CREATE TABLE 语句时的基本表
    • 创建 SQL 例程
    • 创建触发器

示例

  • 示例 1:将序列 ORG_SEQ 上的 USAGE 特权授予任何用户。
       GRANT USAGE ON SEQUENCE ORG_SEQ TO PUBLIC
  • 示例 2:将变更序列 GENERATE_ID 的能力以及将此特权授予其他用户的能力授予用户 BOBBY。
       GRANT ALTER ON SEQUENCE GENERATE_ID TO BOBBY WITH GRANT OPTION