SET SESSION AUTHORIZATION
SET SESSION AUTHORIZATION 语句更改 SESSION_USER 和 USER 专用寄存器的值。 它还会更改与当前线程关联的用户概要文件的名称。
调用
此语句可以嵌入在应用程序中或以交互方式发出。 它是可以动态准备的可执行语句。 不得在 REXX 中指定此参数。
SQL 触发器, SQL 函数或 SQL 过程中不允许 SET SESSION AUTHORIZATION。
授权
如果在语句上指定的授权名称与 SYSTEM_USER 专用寄存器中的值不同,那么该语句的授权标识所拥有的特权必须包含系统权限 *ALLOBJ。 此外,如果 authorization-name 标识的用户概要文件已禁用或其密码已到期,那么需要 *SECADM 的系统权限。
如果在语句上指定的授权名称与 SYSTEM_USER 专用寄存器相同,那么不需要授权即可执行此语句。
如果在语句中引用了全局变量,那么该语句的授权标识所拥有的特权必须至少包含下列其中一项:
- 对于语句中标识的全局变量,
- 对全局变量的 READ 特权,以及
- 对包含全局变量的模式的 USAGE 特权
- 数据库管理员权限
语法
描述
- 授权名称
- 标识要用作 SESSION_USER 专用寄存器的新值和运行时授权标识的授权标识。
授权标识必须是当前服务器上存在的有效用户概要文件或组用户概要文件。 可能未使用几个没有用户概要文件句柄的系统用户概要文件。 有关更多信息,请参阅 "获取概要文件句柄 API"。
- CURRENT USER
- SESSION_USER 专用寄存器和运行时授权标识设置为 CURRENT USER 专用寄存器。
- SESSION_USER 或 USER
- SESSION_USER 专用寄存器和运行时授权标识设置为 USER 专用寄存器。
- SYSTEM_USER
- SESSION_USER 专用寄存器和运行时授权标识设置为 SYSTEM_USER 专用寄存器。
- 变量
- 包含授权标识名称的变量。 如果它是使用模式名称限定的,那么它可以是全局变量。
变量:
- 必须是字符串变量。
- 如果 变量 具有关联的指示符变量,那么该指示符变量的值不得指示空值。
- 必须包含左对齐的授权标识,并且必须符合构成普通标识或定界标识的规则。
- 必须在右侧填充空白。
- 不得为空值。
- 不得是关键字 USER , SESSION_USER , SYSTEM_USER 或 CURRENT_USER。
- 字符串常数
- 具有授权标识的字符常量。
注意
SET SESSION AUTHORIZATION 的其他影响: SET SESSION AUTHORIZATION 导致发生以下情况:
- 将关闭在工作单元期间打开的所有游标。
- 将释放所有 LOB 定位器。
- 将释放在此工作单元的落实定义下获取的所有锁定。
- 所有已准备好的语句都将被销毁。
- 将取消分配所有 SQL 描述符区域。
- 将清除所有过程结果集。
- 将重置加密密码。
- 所有打开的本机数据库文件和 Integrated File System (IFS) 文件都已关闭,包括套接字, NTC 会话和内存映射。
执行 SET SESSION AUTHORIZATION 时将保留其他资源,包括全局变量和声明的临时表。 建议在执行 SET SESSION AUTHORIZATION 语句之前删除或清除所有已声明的临时表,并清除全局变量。
SET SESSION AUTHORIZATION 限制: 只能将此语句作为导致工作单元期间可能回退的工作的第一个语句发出。 在执行 SET SESSION AUTHORIZATION 之前,可以发出以下可执行语句:
- 所有 SQL 事务语句
- 所有 SQL 连接语句
- 所有 SQL 会话语句
- GET DIAGNOSTICS
如果存在与当前服务器的连接以外的任何连接 (包括与非缺省激活组的任何本地连接) ,那么不允许 SET SESSION AUTHORIZATION。
如果打开了任何挂起的游标或存在任何挂起的定位器,那么不允许 SET SESSION AUTHORIZATION。
SET SESSION AUTHORIZATION 作用域: SET SESSION AUTHORIZATION 的作用域是当前线程。 应用程序进程中的其他线程不受影响。
示例
示例 1: 以下语句设置 SESSION_USER 专用寄存器。
SET SESSION_USER = RAJIV示例 2: 将会话授权标识 (SESSION_USER 专用寄存器) 设置为系统授权标识的值,该标识是建立已发出语句的连接的标识。
SET SESSION AUTHORIZATION SYSTEM_USER