技术开发 频道

Oracle认证:Oracle的安全标记算不算bug

  【IT168技术】为了方便广大考生更好的复习,帮考网综合整理提供了Oracle认证:Oracle的安全标记算不算bug,以供各位考生考试复习参考,希望对考生复习有所帮助。

  Oracle的安全标记算不算bug

  ORACLE提供了安全标记的功能,即OLS,也就是常说的强制访问控制。其模型是建立在BLP安全模型之上,并进行了扩展。

  BLP模型的元素是安全级别和范围,即可以对主客体进行安全级别和范围的设定,从而达到控制数据流动的目的,即向下读、向上写的规则。即用户可以读低于用户安全级别的数据,写高于用户安全级别的数据(当然还有范围的约定,这里不介绍了)。

  ORACLE扩展了BLP模型,用户可以设置多个安全级别,通过如下接口:

  1.SA_USER_ADMIN.SET_LEVELS

  2.Syntax:

  3.PROCEDURE SET_LEVELS (policy_name IN VARCHAR2,

  4.user_name

  5.IN VARCHAR2,

  6.max_level

  7.IN VARCHAR2,

  8.min_level

  9.IN VARCHAR2 DEFAULT NULL,

  10.def_level

  11.IN VARCHAR2 DEFAULT NULL,

  12.row_level

  13.IN VARCHAR2 DEFAULT NULL);

  14.Parameter

  Meaning

  15.policy_name

  Specifies the policy

  16.user_name

  Specifies the user name

  17.max_level

  The highest level for read and write access

  18.min_level

  The lowest level for write access def_level

  Specifies the default level (equal to or

  19.greater than the minimum level, and equal

  to or less than the maximum level) 20.row_level

  Specifies the row level (equal to or greater

  than the minimum level, and equal to or

  可以看出,用户标记可以指定最大、最小、默认和行级四种安全级别。这些安全级别之间是有约束关系的

  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

0
相关文章