执行例程所需的权限
在执行、定义和调用用户定义函数(UDF)和存储过程(属于例程类型 )时,需要执行一系列步骤。
下表总结了执行常规任务所需的常见任务和权限,包括UDF和存储过程。
| 角色 | 任务 | 需要的特权 |
|---|---|---|
| 实施者 | 如果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绑定选项。