VERIFY_GROUP_FOR_USER 标量函数
VERIFY_GROUP_FOR_USER函数返回一个值,指示与第一个参数关联的主授权ID和辅助授权ID是否在第二个参数列表中指定的授权名称中。
该模式是 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';
