DYNAMICRULES 绑定选项

DYNAMICRULES选项用于确定某些动态SQL属性在运行时适用的规则。

命令选项 选项价值 搭配
动态规则
  • (RUN)
  • (BIND)
  • (DEFINEBIND)
  • (DEFINERUN)
  • (INVOKEBIND)
  • (INVOKERUN)
注:
  1. DYNAMICRULES 绑定选项对于本机 SQL 过程本机 REST 服务高级触发器的包的 REBIND 无效。
如果为绑定计划指定了动态规则,则只有在满足以下条件之一时,动态规则值才会生效:
  • 指定了会员选项。 在这种情况下,生成的包将继承BIND PLAN命令中的DYNAMICRULES值。 如果为REBIND PLAN指定了DYNAMICRULES,则DYNAMICRULES值不起作用。
  • 现有包没有DYNAMICRULES值。 如果发出具有 DYNAMICRULES 值的绑定计划,且包列表中包含一个没有 DYNAMICRULES 值的包,则该包在运行时从计划中继承 DYNAMICRULES 值。

如果为“重新绑定计划”指定了“动态规则”,则只有在现有程序包没有“动态规则”值时,“动态规则”值才会生效。 如果发布具有动态规则值的重新绑定计划,且软件包列表中包含没有动态规则值的软件包,则软件包在运行时将从计划中继承动态规则值。

DYNAMICRULES 影响的动态 SQL 属性包括:
  • 用于检查授权的授权标识
  • 用于不合格对象的限定符
  • Db2 用于解析和语义验证动态SQL语句的应用程序编程选项的源文件
  • 动态 SQL 语句是否可以包括 GRANT、REVOKE、ALTER、CREATE、DROP 和 RENAME 语句
除了DYNAMICRULES值,包的运行时环境还控制动态SQL语句在运行时的行为。 两种可能的运行环境是:
  • 程序包作为独立程序的组成部分运行
  • 该包作为存储过程或用户定义的函数包运行,或在存储过程或用户定义的函数下运行

DYNAMICRULES 值与运行时环境共同确定动态 SQL 属性的值。 这一组属性值被称为动态 SQL 语句行为。 这四种行为分别是:运行、绑定、定义和调用。

以下DYNAMICRULES选项描述包括对每个运行环境下的动态SQL语句行为的描述。 表1 汇总了这些信息。

选项说明 DYNAMICRULES

(RUN)
使用动态 SQL 语句的标准属性值处理动态 SQL 语句,统称为运行行为
  • Db2 使用应用程序流程的授权ID和SQL授权ID(CURRENT SQLID特殊寄存器的值)对动态SQL语句进行授权检查。
  • Db2 使用当前模式特殊寄存器的值作为表、视图、索引和别名的默认模式。
  • 动态 SQL 语句使用在安装过程中指定的应用程序编程选项的值。 安装选项“用于动态规则”不起作用。
  • GRANT、REVOKE、CREATE、ALTER、DROP和RENAME语句可以动态执行。
DYNAMICRULES(BIND)
使用以下属性值处理动态 SQL 语句,这些属性值统称为绑定行为
  • Db2 使用包的授权ID对动态SQL语句进行授权检查。
  • 动态 SQL 语句中的无限制表、视图、索引和别名会隐式使用绑定选项 QUALIFIER 的值进行限定;如果您未指定 QUALIFIER,则 Db2 会使用包所有者的授权 ID 作为默认架构。
  • 绑定、定义和调用行为的常见属性值中描述的属性值。
  • 如果您正在运行一个可信的上下文,其中包含一个角色,或者所有者是一个角色,则 Db2 将使用包所有者的授权ID来检查动态SQL语句的授权。 用于确定静态(嵌入式)语句授权ID的规则同样适用于动态语句。 Db2 使用数据包所有者的授权ID来检查动态SQL语句的授权。 特权集是指由套餐所有者授权ID持有的特权。 主人也可以是一个角色。 绑定命令的QUALIFIER选项中指定的标识符用于绑定SQL语句,它是所有非限定表、视图、别名、索引和序列的隐式限定符。 如果在创建软件包或上次重新绑定时未使用此绑定选项,则隐式限定符为软件包所有者的授权ID。 主人也可以是一个角色。
DYNAMICRULES(DEFINEBIND)
使用两种行为之一处理动态 SQL 语句: 定义行为绑定行为
当包以存储过程或用户定义的函数包的形式运行或在其下运行时, Db2 会使用定义行为处理动态SQL语句,该行为由以下属性值组成:
  • Db2 使用用户定义函数或存储过程所有者的授权ID,对应用程序包中的动态SQL语句进行授权检查。
  • 非限定对象的默认限定符为用户定义的函数或存储过程的所有者。
  • 绑定、定义和调用行为的常见属性值中描述的属性值。
  • 如果您正在运行一个受信任的上下文,其中包含一个角色,或者所有者是一个角色,则定义行为仅适用于动态 SQL 语句位于作为存储过程或用户定义函数运行的包中(或在存储过程或用户定义函数包下运行),并且该包与 DYNAMICRULES(DEFINEBIND)绑定。 Db2 使用存储过程或用户定义函数所有者的授权ID,对应用程序包中的动态SQL语句进行授权检查。 这可以是主授权ID、次授权ID或角色。 在这种情况下,特权集是指存储过程或用户定义函数所有者的授权ID所拥有的特权。 此所有者可以是主要或次要授权ID或角色。 存储过程或用户定义函数所有者的授权ID也是非限定表、视图、别名、索引和序列名称的隐式限定符。 主人也可以是一个角色。

当程序包作为独立程序运行时, Db2 使用绑定行为处理动态SQL语句,绑定行为在 BIND关键字中进行了描述。

DYNAMICRULES(DEFINERUN)
使用两种行为之一处理动态 SQL 语句 :定义行为运行行为

当包以存储过程或用户定义的函数包的形式运行时,动态 SQL 语句具有定义行为,这在 DEFINEBIND 关键字中进行了描述。

当程序包作为独立程序运行时, Db2 会使用运行行为处理动态SQL语句,运行行为在 RUN关键字中进行了描述。

如果您正在运行一个受信任的上下文,其中包含一个角色,或者所有者是一个角色,则定义行为仅适用于动态 SQL 语句位于作为存储过程或用户定义函数运行的包中(或在存储过程或用户定义函数包下运行),并且该包与 DYNAMICRULES(DEFINERUN)绑定。 Db2 使用存储过程或用户定义函数所有者的授权ID,对应用程序包中的动态SQL语句进行授权检查。 这可以是主授权ID、次授权ID或角色。 在这种情况下,特权集是指存储过程或用户定义函数所有者的授权ID所拥有的特权。 此所有者可以是主要或次要授权ID或角色。 存储过程或用户定义函数所有者的授权ID也是非限定表、视图、别名、索引和序列名称的隐式限定符。 主人也可以是一个角色。

DYNAMICRULES(INVOKEBIND)
使用两种行为之一处理动态 SQL 语句: 调用行为绑定行为
当包以存储过程或用户定义的函数包的形式运行或在其下运行时, Db2 使用invoke行为处理动态SQL语句,该行为由以下属性值组成:
  • Db2 使用用户定义函数或存储过程调用者的授权ID,用于应用程序包中动态SQL语句的授权检查。

    如果调用者是该进程的主要授权ID或当前SQLID值,则还会检查次要授权ID,以确定是否需要它们进行所需授权。 否则,仅检查调用者的ID,以确定是否具有所需的授权。

  • 非限定对象的默认限定符是用户定义的函数或存储过程调用器。
  • 绑定、定义和调用行为的常见属性值中描述的属性值。
  • 如果您正在运行一个受信任的上下文,其中包含一个角色,或者所有者是一个角色,那么只有在动态 SQL 语句位于作为存储过程或用户定义函数运行的包中(或在存储过程或用户定义函数包下运行),并且该包与 DYNAMICRULES(INVOKEBIND)绑定时,调用行为才适用。 Db2 使用存储过程或用户定义函数的授权ID,用于应用程序包中动态SQL语句的授权检查。 调用者也可以是一个角色。 特权集是指存储过程或用户定义函数调用者的授权ID所拥有的特权。 但是,如果调用者是该进程的主要授权ID或当前SQLID值,则还会检查次要授权ID以及主要授权ID的角色。 因此,特权集是流程中每个授权ID所拥有的一组特权与主要授权ID角色的结合。 存储过程或用户定义的函数调用者的授权ID也是非限定表、视图、别名、索引和序列名称的隐式限定符。 调用者也可以是一个角色。

当程序包作为独立程序运行时, Db2 使用绑定行为处理动态SQL语句,绑定行为在 BIND关键字中进行了描述。

DYNAMICRULES(INVOKERUN)
使用两种行为之一处理动态 SQL 语句: 调用行为运行行为

当包以存储过程或用户定义的函数包的形式运行或在其下运行时, Db2 使用invoke行为处理动态SQL语句,这在 INVOKEBIND关键字中进行了描述。

如果您正在运行一个受信任的上下文,其中包含一个角色,或者所有者是一个角色,那么只有在动态 SQL 语句位于作为存储过程或用户定义函数运行的包中(或在存储过程或用户定义函数包下运行),并且该包与 DYNAMICRULES(INVOKERUN)绑定时,调用行为才适用。 Db2 使用存储过程或用户定义函数的授权ID,用于应用程序包中动态SQL语句的授权检查。 调用者也可以是一个角色。 特权集是指存储过程或用户定义函数调用者的授权ID所拥有的特权。 但是,如果调用者是该进程的主要授权ID或当前SQLID值,则还会检查次要授权ID以及主要授权ID的角色。 因此,特权集是流程中每个授权ID所拥有的一组特权与主要授权ID角色的结合。 存储过程或用户定义的函数调用者的授权ID也是非限定表、视图、别名、索引和序列名称的隐式限定符。 调用者也可以是一个角色。

当程序包作为独立程序运行时, Db2 会使用运行行为处理动态SQL语句,运行行为在 RUN关键字中进行了描述。

绑定、定义和调用行为的常见属性值

以下属性值适用于具有绑定、定义或调用行为的包中的动态 SQL 语句:
  • 您可以在绑定任何DYNAMICRULES值的程序包中执行语句SET CURRENT SQLID。 然而, Db2 不会将当前SQLID的值用作动态SQL语句的授权ID。

    Db2 总是使用当前 SQLID 的值作为 EXPLAIN 输出的限定符和优化器提示输入 PLAN_TABLE。 (如果当前 SQLID 的值在 PLAN_TABLE 上有一个别名,并且具有相应的权限,则 PLAN_TABLE 将被填充。)

  • 如果安装选项 USE FOR DYNAMICRULES 的值为 YES,则 Db2 使用安装期间指定的应用程序编程默认值来解析和语义验证动态 SQL 语句。 如果DYNAMICRULES的USE值为NO, Db2 将使用预编译器选项来解析和语义验证动态SQL语句。
  • GRANT、REVOKE、CREATE、ALTER、DROP和RENAME语句不能动态执行。

远程 Db2 服务器

对于使用DRDA访问的包, Db2 在绑定时将DYNAMICRULES选项发送到 Db2 服务器。

动态规则行为和动态SQL属性

下表总结了每种行为的动态SQL语句属性值。

表 1. 动态 SQL 语句行为的定义
动态 SQL 属性 约束行为价值 运行行为价值 定义行为的价值 调用行为的价值
授权标识 程序包所有者 CURRENT SQLID 用户定义函数或存储过程所有者 调用者的授权ID
未限定的对象的缺省限定符 绑定所有者或限定词值 CURRENT SQLID 用户定义函数或存储过程所有者 调用者的授权ID
CURRENT SQLID 初始化为主要身份验证。 允许设置 SQLID。 初始化为主要身份验证。 允许设置 SQLID。 初始化为主要身份验证。 允许设置 SQLID。 初始化为主要身份验证。 允许设置 SQLID。
应用程序编程选项的来源 由应用程序默认参数 DYNRULS 确定 应用程序编程默认安装面板 由应用程序默认参数 DYNRULS 确定 由应用程序默认参数 DYNRULS 确定
可以执行GRANT、REVOKE、CREATE、ALTER、DROP、RENAME吗? False False False

默认值 DYNAMICRULES

进程 缺省值
绑定计划 运行
绑定程序包 空白,或 RUN(对于在远程运行的包) Db2 for z/OS® 服务器。1、2
重新绑定计划 现有值
重新绑定程序包 现有值
注:
  1. 当包裹价值为空时,运行包裹时使用的价值将从计划价值中继承。
  2. 远程 Db2 for z/OS 服务器上软件包的默认值为RUN。 默认值由服务器设置。

目录记录 DYNAMICRULES

请参阅SYSPACKAGE目录表SYSPLAN目录表中的DYNAMICRULES列。