SECLABEL_BY_COMP 函数

SECLABEL_BY_COMP 函数返回 IDSSECURITYLABEL 对象,其为它的内部编码的字符串格式的安全标签。此函数使得用户能够通过指定它的组件值直接地提供安全标签。

如果安全标签组件需要多个值,则可通过将那些值放在圆括号之间来指定这样的多个值,比如 (value_1, value_2, ...)。当特定的安全标签中的组件需要为空时,可通过在左圆括号和右圆括号之间什么都不放来指定它,比如 ()。由于在安全组件的元素之中,空格(ASCII 32)是有效的字符,因此出现在安全标签字符串中的任何空格都作为那个组件的元素值的一部分来处理。

安全标签字符串被限定为最大 32 KB。如果该字符串长度超出此限制,则返回错误。

下列 INSERT 语句将一行插入到表 T1 内,该表受到名为 ‘MegaCorp’ 的安全策略保护,该策略有三个组件:'level'、'compartments' 和 'groups'。在此,用户为由指定 SECLABEL_BY_COMP 函数被插入的行提供安全标签。在此示例中,对于 level 组件,安全标签有值 'VP',对于 compartments 组件,安全标签有值 'Marketing',对于 groups 组件,安全标签有值 'West'。在 SECLABEL_BY_COMP 的参数中,冒号符号分隔这些安全组件元素值,且引号定界安全标签的组件值的列表。
INSERT INTO T1 
          VALUES (SECLABEL_BY_COMP ('MegaCorp', 'VP:Marketing:West'), 1, 'xyz';
在下一示例中,INSERT 语句在表 T1 中插入一行,该表受到同一 MegaCorp 安全策略的保护,该策略有与前面的示例相同的三个组件:levelcompartmentsgroups。用户为通过指定该策略名称要被插入的行提供安全标签,以及安全组件元素的列表作为 SECLABEL_BY_COMP 函数的参数。在此,对于 level 组件,安全标签有值 'Director',对于 compartments 组件,安全标签有值 'HR' 和 'Finance',对于 groups 组件,安全标签有值 'East' 。
INSERT INTO T1 
          VALUES (SECLABEL_BY_COMP ('MegaCorp', 'Director:(HR,Finance):East'), 1, 'xyz');
下列示例将一行插入到表 T1 内,该表受到 MegaCorp 安全组件的保护,其三个组件为 levelcompartmentsgroupsSECLABEL_BY_COMP 函数为要被插入的行指定安全标签。在此示例中,对于 level 组件,安全标签有值 'CEO',对于 compartments 组件,安全标签为空集,对于 groups 组件,安全标签有值 'EntireRegion'。
INSERT INTO T1 
          VALUES (SECLABEL_BY_COMP ('MegaCorp', 'CEO:():EntireRegion'), 3, 'abc');

如在所有这些示例中那样,SECLABEL_BY_COMP 函数调用的成功不保证 INSERT 语句的成功,因为在数据库服务器允许或拒绝对于插入新行的访问之前,首先要使用 MegaCorp 安全策略的 IDSLBACRWRITE 规则,将用户的安全凭证与保护表 T1 的安全标签进行对比,