执行例程所需的权限

在执行、定义和调用用户定义函数(UDF)和存储过程(属于例程类型 )时,需要执行一系列步骤。

开始通用编程接口信息。下表总结了执行常规任务所需的常见任务和权限,包括UDF和存储过程。

表 1. 日常工作的常见任务和所需权限
角色 任务 需要的特权
实施者 如果SQL是常规程序:代码、预编译、编译和链接编辑程序,以用作常规程序。 将程序作为常规程序包绑定。

如果例程中没有 SQL:则对程序进行编码、编译和链接编辑。

如果打包,则需在收藏上使用BINDADD系统权限和CREATE IN。
定义者 发出CREATE FUNCTION语句定义UDF,发出CREATE PROCEDURE语句定义存储过程。 CREATEIN 模式特权。 在调用时对常规包执行权限。
调用程序 从SQL应用程序调用一个例程。 在例程中执行权限。

常规实施者通常在程序中编写例程并预编译程序。 如果程序包含 SQL 语句,则实施者将绑定 DBRM。 通常,将DBRM绑定到软件包中的授权ID是软件包所有者。 实施者是常规包的所有者。 作为包的所有者,实施者隐含地拥有包的执行权限,并有权授予其他用户执行包内代码的执行权限。

执行者授予定义者常规包的 EXECUTE 权限。 仅当程序包包含 SQL 时,才需要 EXECUTE 权限。 对于用户定义函数(UDF),定义者需要对该包拥有EXECUTE权限。 对于存储过程,将检查定义者和其他ID对包的EXECUTE权限。

套路定义者拥有套路。 定义者发出CREATE FUNCTION语句来定义UDF,或发出CREATE PROCEDURE语句来定义存储过程。 常规的定义如下:

  • 如果SQL语句嵌入在应用程序中,则定义者是计划或包所有者的授权ID。
  • 如果SQL语句是动态准备的,则定义者是当前SQLID特殊寄存器中包含的SQL授权ID。 如果SQL语句是在ROLE AS OBJECT OWNER子句指定的可信上下文中执行的,则定义者就是实际的角色

定义者授予调用者(即任何需要调用例程的用户)执行例程的权限。

常规调用器从调用计划或包中的SQL语句中调用常规。 例程的调用者确定如下:

  • 对于静态调用,使用包含UDF调用的包的所有者的授权。
  • 对于动态调用,包含用户定义调用的包的DYNAMICRULES绑定选项决定了使用的授权。 如需了解 Db2 如何应用DYNAMICRULES绑定选项的更多信息,请参阅 DYNAMICRULES绑定选项
通用编程接口信息结束。