可以看出,用户标记可以指定最大、最小、默认和行级四种安全级别。这些安全级别之间是有约束关系的
1.min_level《=max_levelmin_level《=def_level《=max_levelmin_level《=row_level《=def_level
如果违法这种规则的话,执行此函数就会失败。了解了这么多之后,我们进行实践,以LBACSYS进行登录,执行如下语句
1.——创建策略P1,并为策略添加安全级别,数值越大代表安全级别越高。
2.——L1《L2《L3《L4
3.EXEC sa_sysdba.create_policy(‘P1’,‘LABEL_COL’);
4.EXEC sa_components.create_level(‘P1’, 10, ‘L1’, ‘L1’);
5.EXEC sa_components.create_level(‘P1’, 20, ‘L2’, ‘L2’);
6.EXEC sa_components.create_level(‘P1’, 30, ‘L3’, ‘L3’);
7.EXEC sa_components.create_level(‘P1’, 40, ‘L4’, ‘L4’);
8.——给用户SYSMAN设置用户标记 9.EXEC sa_user_admin.set_levels(‘P1’,‘SYSMAN’,‘L2’, ‘L1’, ‘L2’, ‘L2’);
根据上面的介绍,这里设置的四种安全级别符合要求。我们通过DBA_SA_USER_LABELS视图可以查看用户的标记。
1.SQL》 SELECT USER_NAME, LABELS FROM DBA_SA_USER_LABELS; 2.USER_NAME
3.——
4.LABELS
5.——
6.SYSMAN
7.MAX READ LABEL=‘L2’,MAX WRITE LABEL=‘L2’,MIN WRITE LABEL=‘L1’,DEFAULT READ LABEL
8.=‘L2’,DEFAULT WRITE LABEL=‘L2’,DEFAULT ROW LABEL=‘L2’ 可以看到MIN WRITE LABEL = L1
同时ORACLE提供了一个系统函数,用于改变标记的值:
1.Syntax:
2.PROCEDURE ALTER_LABEL (
3.policy_name
IN VARCHAR2,
4.label_tag
IN INTEGER,
5.new_label_value
IN VARCHAR2 DEFAULT NULL,
6.new_data_label
IN BOOLEAN DEFAULT NULL);
7.PROCEDURE ALTER_LABEL ( 8.
policy_name
IN VARCHAR2,
8.label_value
IN VARCHAR2,
9.new_label_value
IN VARCHAR2 DEFAULT NULL,
11.new_data_label
IN BOOLEAN DEFAULT NULL);
12.Table 6–18 Parameters for SA_LABEL_ADMIN.ALTER_LABEL[nextapage]
13.Parameter Name
Parameter Description
14.policy_name
Specifies the name of an existing policy
15.label_tag
Identifies the integer tag assigned to the label
to be altered
16.label_value
Identifies the existing character string
representation of the label to be altered
17.new_label_value
Specifies the new character string
representation of the label value. If NULL, the
existing value is not changed. 此时我们对L1的标记进行改写
1.EXEC sa_label_admin.alter_label(‘P1’, ‘L1’, ‘L4’, TRUE); 执行成功,我们查看用户标记表,发现如下所示:
1.SQL》 SELECT USER_NAME, LABELS FROM DBA_SA_USER_LABELS;
2.USER_NAME
3.——
4.LABELS
5.——
6.SYSMAN
7.MAX READ LABEL=‘L2’,MAX WRITE LABEL=‘L2’,MIN WRITE LABEL=‘L4’,DEFAULT READ LABEL
8.=‘L2’,DEFAULT WRITE LABEL=‘L2’,DEFAULT ROW LABEL=‘L2’ 可以看出MIN WRITE LABEL变成了L4,其他的LABEL还是L2,这时的用户标记已经是不合法的了,在这种情况下,在执行相应操作时,很多操作会被禁止,比如对打了标记的表进行更新操作,因为此时的用户标记在进行访问判断时永远是恒假值,以上实验的版本为11.1.0.6.0