LBAC 规则集:DB2LBACRULES

DB2LBACRULES LBAC 规则集提供了一组传统规则,这些规则用于对安全标号组件值进行比较。 这个规则集能够预防上写和下写。

上写和下写的定义

上写和下写仅适用于 ARRAY 类型的组件,并且仅适用于写访问权。 当用于保护所写数据的值大于您的值时,就会发生上写。 当用于保护数据的值小于您的值时,就会发生下写。 缺省情况下,既不允许上写也不允许下写,这意味着只能写您的值所保护的数据。

在对同一组件的两个值进行比较时,使用的规则取决于组件类型(ARRAY、SET 或 TREE)以及所尝试的访问类型(读或写)。 下表列示了规则、指示了使用每个规则的时间,并描述了该规则确定是否阻塞访问的途径。

表 1. DB2LBACRULES 规则摘要
规则名称 用来对此类型的组件的值进行比较 用于此类型的访问 当满足此条件时阻塞访问
DB2LBACREADARRAY ARRAY Read 用户的值小于保护值。
DB2LBACREADSET SET Read 存在一个或多个用户所没有的保护值。
DB2LBACREADTREE TREE Read 用户所有的值都既不等于任何一个保护值也不是任何一个保护值的祖代。
DB2LBACWRITEARRAY ARRAY 用户的值大于保护值或小于保护值。1
DB2LBACWRITESET SET 存在一个或多个用户所没有的保护值。
DB2LBACWRITETREE TREE 用户所有的值都既不等于任何一个保护值也不是任何一个保护值的祖代。
注:
  1. 可以将 DB2LBACWRITEARRAY 规则看成两个不同规则的组合。 其中一个规则防止写高于您的级别的数据(上写),另一个规则防止写低于您的级别的数据(下写)。 在进行此规则的免除授权时,可以对用户免除这两个规则的其中一个或者全部。

规则如何处理空值

所有规则都以相同的方式处理空值。 空值不会阻塞其他的值,但会被任何非空值阻塞。

DB2LBACREADSET 和 DB2LBACWRITESET 示例

这些示例对尝试读或尝试写受保护数据的用户有效。 这些示例假定值属于类型为 SET 的组件,该组件包含下列元素:one two three four
表 2. DB2LBACREADSET 和 DB2LBACWRITESET 规则的应用示例
用户的值 保护值 是否阻塞访问?
'one' 'one' 不阻塞。 值相同。
“(one,two,three)” 'one' 不阻塞。 用户的值包含元素“one”。
“(one,two)” “(one,two,four)” 阻塞。 元素“four”包含在保护值中,但未包含在用户的值中。
'()' 'one' 阻塞。 空值会被任何非空值阻塞。
'one' '()' 不阻塞。 空值不会阻塞任何值。
'()' '()' 不阻塞。 空值不会阻塞任何值。

DB2LBACREADTREE 和 DB2LBACWRITETREE

这些示例对同时进行读写访问的用户有效。 这些示例假定值属于类型为 TREE 的组件,该组件是按以下方式定义的:
CREATE SECURITY LABEL COMPONENT mycomp 
TREE ( 
    'Corporate'      ROOT, 
    'Publishing'     UNDER 'Corporate', 
    'Software'       UNDER 'Corporate', 
    'Development'    UNDER 'Software', 
    'Sales'          UNDER 'Software', 
    'Support'        UNDER 'Software' 
    'Business Sales' UNDER 'Sales'
    'Home Sales'     UNDER 'Sales'
)
这意味着元素是按此方式排列的:
图显示示例中使用的 TREE 组件的排列。
表 3. DB2LBACREADTREE 和 DB2LBACWRITETREE 规则的应用示例
用户的值 保护值 是否阻塞访问?
'(Support,Sales)' 'Development' 阻塞。 元素“Development”不是用户的值,“Support”和“Sales”都不是“Development”的祖代。
'(Development,Software)' '(Business Sales,Publishing)' 不阻塞。 元素“Software”是“Business Sales”的祖代。
'(Publishing,Sales)' '(Publishing,Support)' 不阻塞。 两组值都包含元素“Publishing”。
'Corporate' 'Development' 不阻塞。 根值是所有其他值的祖代。
'()' 'Sales' 阻塞。 空值会被任何非空值阻塞。
'Home Sales' '()' 不阻塞。 空值不会阻塞任何值。
'()' '()' 不阻塞。 空值不会阻塞任何值。

DB2LBACREADARRAY 示例

这些示例仅适用于读访问。 这些示例假定值属于类型为 ARRAY 的组件,该组件包含按以下方式排列的下列元素:
这些元素按值递减顺序列出。 最高机密是先,然后是秘密,然后是员工,然后是公共。
表 4. DB2LBACREADARRAY 规则的应用示例
用户的值 保护值 是否阻塞读访问?
“Secret” “Employee” 不阻塞。 元素“Secret”高于元素“Employee”。
“Secret” “Secret” 不阻塞。 值相同。
“Secret” 'Top Secret' 阻塞。 元素“Top Secret”高于元素“Secret”。
'()' 'Public' 阻塞。 空值会被任何非空值阻塞。
'Public' '()' 不阻塞。 空值不会阻塞任何值。
'()' '()' 不阻塞。 空值不会阻塞任何值。

DB2LBACWRITEARRAY 示例

这些示例仅适用于写访问。 这些示例假定值属于类型为 ARRAY 的组件,该组件包含按以下方式排列的下列元素:
这些元素按值递减顺序列出。 最高机密是先,然后是秘密,然后是员工,然后是公共。
表 5。 DB2LBACWRITEARRAY 规则的应用示例
用户的值 保护值 是否阻塞写访问?
“Secret” “Employee” 阻塞。 元素“Employee”低于元素“Secret”。
“Secret” “Secret” 不阻塞。 值相同。
“Secret” 'Top Secret' 阻塞。 元素“Top Secret”高于元素“Secret”。
'()' 'Public' 阻塞。 空值会被任何非空值阻塞。
'Public' '()' 不阻塞。 空值不会阻塞任何值。
'()' '()' 不阻塞。 空值不会阻塞任何值。