您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

Oracle的安全标记算不算bug

 

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

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

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

SA_USER_ADMIN.SET_LEVELS

Syntax:

PROCEDURE SET_LEVELS (policy_name IN VARCHAR2,

user_name

IN VARCHAR2,

max_level

IN VARCHAR2,

min_level

IN VARCHAR2 DEFAULT NULL,

def_level

IN VARCHAR2 DEFAULT NULL,

row_level

IN VARCHAR2 DEFAULT NULL);

 

Parameter                 Meaning

policy_name               Specifies the policy

user_name                 Specifies the user name

max_level                 The highest level for read and write access

min_level                 The lowest level for write access 

def_level                 Specifies the default level

row_level                 Specifies the row level


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

min_level<=max_levelmin_level<=def_level<=max_levelmin_level<=row_level<=def_level


如果违法这种规则的话,执行此函数就会失败。了解了这么多之后,我们进行实践,以LBACSYS进行登录,执行如下语句

--创建策略P1,并为策略添加安全级别,数值越大代表安全级别越高。

--L1<L2<L3<L4

EXEC sa_sysdba.create_policy('P1','LABEL_COL');

EXEC sa_components.create_level('P1', 10, 'L1', 'L1');

EXEC sa_components.create_level('P1', 20, 'L2', 'L2');

EXEC sa_components.create_level('P1', 30, 'L3', 'L3');

EXEC sa_components.create_level('P1', 40, 'L4', 'L4');

--给用户SYSMAN设置用户标记

EXEC sa_user_admin.set_levels('P1','SYSMAN','L2', 'L1', 'L2', 'L2');

根据上面的介绍,这里设置的四种安全级别符合要求。我们通过DBA_SA_USER_LABELS视图可以查看用户的标记。

SQL> SELECT USER_NAME, LABELS FROM DBA_SA_USER_LABELS;

USER_NAME

--------------------------------------------------------------------------------

LABELS

--------------------------------------------------------------------------------

SYSMAN

MAX READ LABEL='L2',MAX WRITE LABEL='L2',MIN WRITE LABEL='L1',DEFAULT READ LABEL

='L2',DEFAULT WRITE LABEL='L2',DEFAULT ROW LABEL='L2'

可以看到MIN WRITE LABEL = L1

同时ORACLE提供了一个系统函数,用于改变标记的值:

Syntax:

PROCEDURE ALTER_LABEL (

policy_name       IN VARCHAR2,

label_tag         IN INTEGER,

new_label_value   IN VARCHAR2 DEFAULT NULL,

new_data_label    IN BOOLEAN  DEFAULT NULL);

PROCEDURE ALTER_LABEL (

policy_name       IN VARCHAR2,

label_value       IN VARCHAR2,

new_label_value   IN VARCHAR2 DEFAULT NULL,

new_data_label    IN BOOLEAN  DEFAULT NULL);

Table 6–18 Parameters for SA_LABEL_ADMIN.ALTER_LABEL

Parameter Name                         Parameter Description

policy_name                     Specifies the name of an existing policy

label_tag                          Identifies the integer tag assigned to the label                                                                           to be altered

label_value                         Identifies the existing character string                                                                                   representation of the label to be altered

new_label_value                 Specifies the new character string                                                                                   representation of the label value. If NULL, the                                                                             existing value is not changed.


此时我们对L1的标记进行改写

EXEC sa_label_admin.alter_label('P1', 'L1', 'L4', TRUE);

执行成功,我们查看用户标记表,发现如下所示:

SQL> SELECT USER_NAME, LABELS FROM DBA_SA_USER_LABELS;

USER_NAME

--------------------------------------------------------------------------------

LABELS

--------------------------------------------------------------------------------

SYSMAN

MAX READ LABEL='L2',MAX WRITE LABEL='L2',MIN WRITE LABEL='L4',DEFAULT READ LABEL

='L2',DEFAULT WRITE LABEL='L2',DEFAULT ROW LABEL='L2'

可以看出MIN WRITE LABEL变成了L4,其他的LABEL还是L2,这时的用户标记已经是不合法的了,在这种情况下,在执行相应操作时,很多操作会被禁止,比如对打了标记的表进行更新操作,因为此时的用户标记在进行访问判断时永远是恒假值(不过此时系统不会崩溃,有点失望),以上实验的版本为11.1.0.6.0。

(文章来自网络,如有侵权请来信告知,本站将在第一时间删除。)

相关文章 [上一篇] 浅述当前模式读与一致性读续
010-88589926(88587026)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-88589926,88589826,88587026 QQ讨论群:243729577 182441349 邮箱:cuug_bj@cuug.com
通信地址:北京市海淀区紫竹院路98号北京化工大学科技园609室(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号  京公网安备110108006275号