WITH IDSLBACRULES 关键字指定新安全策略执行的读访问权规则和写访问权规则。如果您没有指定它们,则这些关键字缺省生效,因为
IDSLBACRULES 存取规则安全策略唯一支持的存取规则。
以下是
IDSLBACRULES 读访问权规则,称为
IDSLBACREAD ,当在 SELECT 、 UPDATE 或 DELETE 操作中从被标签的列或
列中读取数据值时应用此规则:
- IDSLBACREADARRAY:用户安全标签的每个 array 组件必须大于或等于数据行安全标签的 array
组件。也就是说,只有等于或低于用户级别的数据能被读取。
- IDSLBACREADTREE:用户安全标签的每个 tree 组件在数据行安全标签(或一个类似此元素的祖先)的 tree 组件中必须包含至少一个元素。
- IDSLBACREADSET::用户安全标签的每个 SET 组件必须包含数据行安全标签的 SET 组件。
以下是
IDSLBACRULES 写访问权规则,称为
IDSLBACWRITE ,当在 INSERT 、 UPDATE 或 DELETE 操作中向被标签的列或行中写入数据值时应用此规则:
- IDSLBACWRITEARRAY:用户安全标签的每个 array 组件必须等于数据行安全标签的 array 组件。即,只能写入与用户相同级别的数据。
- IDSLBACWRITETREE:用户安全标签的每个 tree 组件在数据行安全标签(或一个类似此元素的祖先)的 tree 组件中必须包含至少一个元素。
- IDSLBACWRITESET:用户安全标签的每个 SET 组件必须包含数据行安全标签的 SET 组件。
如果 DBSECADM 省略 WITH IDSLBACRULES 关键字,则这些规则缺省生效。然而,如果 WITH 关键字之后跟随除 IDSLBACRULES 值之外的任何规范,则
CREATE SECURITY POLICY 语句发生错误而失败,且不会创建安全策略。
除了显式或缺省 WITH IDSLBACRULES 关键字,CREATE SECURITY POLICY 语句还必须指定当用户未授权写入由安全策略保护的表 DELETE
、INSERT
或 UPDATE 语句中提供的显式指定的安全标签时,执行此写访问规则。用户的安全标签和用户持有的豁免凭证可确定用户是否对显式提供的安全标签具有写访问权。
- 如果 CREATE SECURITY POLICY 语句指定 OVERRIDE NOT AUTHORIZED WRITE SECURITY LABEL ,则
GBase 8s
使用此用户安全标签的值,而非 DELETE 、 INSERT 或
UPDATE 语句中显式指定的安全标签,来确定用户是否具有对 DELETE 、 INSERT 或 UPDATE 操作中安全标签保护的数据值的写访问权。
- 缺省为 RESTRICT NOT AUTHORIZED WRITE SECURITY LABEL
。如果您显式地指定这些关键字,或者如果它们缺省生效,当用户没有被授权在有此显式指定的安全标签中行或列中写入数据时,DELETE 、INSERT 或 UPDATE
语句失败。
以下示例创建了名为
MegaCorp 的安全策略,它使用三个安全标签,没有为用户安全标签设置 OVERRIDE 。以便在 DELETE 、INSERT 或 UPDATE
操作中对明确指定的标签不授权该用户的写访问权的数据提供写访问。
CREATE SECURITY POLICY MegaCorp
COMPONENTS levels, compartments, groups
WITH IDSLBACRULES;
要使此示例有效,
levels
、
compartments 和
groups 安全标签组件(或者已被重命名为这些标识符的组件)必须在先前的 CREATE SECURITY LABEL
COMPONENT 语句定义。