VERIFY_GROUP_FOR_USER 标量函数

VERIFY_GROUP_FOR_USER函数返回一个值,指示与第一个参数关联的主授权ID和辅助授权ID是否在第二个参数列表中指定的授权名称中。

阅读语法图跳过可视化语法图VERIFY_GROUP_FOR_USER( SESSION_USERUSER ,group-name-expression )

该模式是 SYSIBM。

SESSION_USER 或者 USER
指定SESSION_USER(或USER)特殊寄存器的值。
组名表达式
指定授权名称的表达式。 当前服务器上授权名称是否存在未得到验证。 group-name-expression 必须返回一个内置字符串数据类型或图形字符串数据类型,且该数据类型不能是LOB。 字符串的长度不得超过SQL标识符的最大长度。 字符串内容不会自动转换为大写,也不会自动调整到右对齐。

函数的结果是一个大整数。 结果不能为空。

如果与SESSION_USER(或USER)特殊寄存器标识的用户关联的主授权ID或次授权ID在组名表达式指定的列表中,则结果为1。 否则,结果为 0。

注意

语法替代方案:
VERIFY_GROUP_FOR_USER函数在连接中是确定性的。 它不是跨连接的确定性。 该函数可以在CREATE MASK或CREATE PERMISSION语句中引用,并用于表表达式或视图合并。

示例

示例 1:

在下面的示例中,EMPLOYEE表启用了列访问控制。 如果连接是在可信环境之外建立的,且玛丽(拥有辅助授权ID MGR )从雇员表中查询了汤姆的社会保险号,则社会保险号将被返回。 当玛丽不再是经理时,同样的查询会显示汤姆社会保险号码的最后四位数字。

假设一个拥有SECADM权限的用户创建了以下列掩码:

CREATE MASK SSN_MASK ON EMPLOYEE
	FOR COLUMN SSN 
	RETURN
	CASE WHEN VERIFY_GROUP_FOR_USER(SESSION_USER, 'MGR') = 1
		THEN SSN
		ELSE 'XXX-XX-' || SUBSTR(SSN, 8, 4)
	END
	ENABLE;

COMMIT;

然后发出ALTER TABLE语句,激活EMPLOYEE表中的列掩码:

ALTER TABLE EMPLOYEE 
	ACTIVATE COLUMN ACCESS CONTROL;

COMMIT;
Mary连接到 Db2 ,发出以下查询,然后断开与 Db2 的连接:
SELECT SSN
	FROM EMPLOYEE
	WHERE NAME = 'Tom';
玛丽收到了汤姆的社会安全号码。

当玛丽不再是经理时,她的授权ID中的二级授权ID MGR将被删除。 下次玛丽连接到 Db2 并发出以下命令时,由于列掩码SSN_MASK,只显示汤姆社会保险号码的最后四位数字:

SELECT SSN
	FROM EMPLOYEE
	WHERE NAME = 'Tom';