SET CURRENT SQLID 语句

SET CURRENT SQLID 语句为 CURRENT SQLID 特殊寄存器赋值。

调用 SET CURRENT SQLID

此语句可嵌入应用程序中或者以交互方式发出。 它是可动态准备的可执行语句。 只有在DYNAMICRULES运行行为生效时,特殊注册CURRENT SQLID的值才会被用作动态SQL语句的SQL授权ID。 对于其他DYNAMICRULES行为,当前SQLID值将被忽略。

授权 SET CURRENT SQLID

更改开始指定的值必须与申请流程的授权ID之一相同。 这条规则始终适用,即使SET CURRENT SQLID作为静态SQL语句发出也是如此。 更改结束

异常:
  • 如果进程的任何授权ID具有SYSADM权限,则当将“单独安全”系统参数设置为“否”时,CURRENT SQLID可以设置为任何值。 请注意,SEPARATE_SECURITY子系统参数不适用于或影响具有SYSADM安装权限的用户。
  • 如果任何授权ID具有安装SYSOPR权限,则无论SEPARATE_SECURITY的值如何,CURRENT SQLID都可以设置为SYSINSTL。

当前SQLID不能设置为角色的名称。

语法 SET CURRENT SQLID

阅读语法图跳过可视化语法图SET CURRENT SQLID= SESSION_USERUSER常量字符串宿主变量

描述 SET CURRENT SQLID

根据指定的值替换当前 SQLID 的值。 更改开始除某些例外情况外,指定的值必须与申请流程的授权ID之一相等。 更多信息,请参阅 SET CURRENT SQLID授权更改结束更改开始
SESSION_USER或USER
指定 SESSION_USER(USER)特殊寄存器的值。
string-constant
指定一个不超过8个字符的字符串常量,用于标识授权ID。 内容不会自动变为大写。
宿主变量
指定一个包含授权ID的主机变量的字符串常量,字符串长度不超过8个字符。 内容不会自动变为大写。
更改结束

备注 SET CURRENT SQLID

对授权ID的影响
SET CURRENT SQLID不会更改进程的主授权ID。

如果 SET CURRENT SQLID 语句在具有动态 SQL 行为(而非运行行为)的存储过程或用户定义函数包中执行,则 SET CURRENT SQLID 语句不会影响包中用于动态 SQL 语句的授权 ID。 动态SQL行为决定了授权ID。 更多信息,请参阅 DYNAMICRULES绑定选项

对特殊寄存器的影响 当前路径
当特殊寄存器 PATH 的值取决于特殊寄存器 CURRENT SQLID 的值时,对特殊寄存器 CURRENT SQLID 的任何更改都不会反映在特殊寄存器 PATH 的值中,除非执行提交操作或发出 SET PATH 语句,以更改 SQL 路径,使用特殊寄存器 CURRENT SQLID 的新值。
DRDA分类
SET CURRENT SQLID由数据库服务器执行,因此在DRDA中归类为非本地SET语句。

示例:SET CURRENT SQLID

示例 1
将当前SQLID设置为主授权ID。
SET CURRENT SQLID = SESSION_USER;
示例 2
将SQL授权ID设置为“ GROUP34 ”(该进程的授权ID之一)。
  SET CURRENT SQLID = 'GROUP34';