oracle 标签安全,oracle标签安全测试

其中牵涉到几个名词,解释一下:

Policy:就是安全策略,一个安全策略是level,compartment,group,label的集合。

Level:等级,这是最基础的安全控制等级,必须设置。

Compartment:分隔(这不是官方翻译),提供第二级的安全控制,是可选的。

Group:组(这不是官方翻译),提供第三级的安全控制,是可选的。

Label:标签,最终体现到每一行上的安全标签,必须设置。只有用户被赋予的标签和此行上的标签相同或者等级更高的时候,该行才能够被用户存取。

1。创建策略:

EXEC sa_sysdba.create_policy('DOC_POLICY','DOC_LABEL');

2。创建敏感等级:

EXEC sa_components.create_level('DOC_POLICY', 1000, 'PUBLIC', 'Public Level');

EXEC sa_components.create_level('DOC_POLICY', 2000, 'INTERNAL', 'Internal Level');

3。创建分隔:

EXEC sa_components.create_compartment('DOC_POLICY', 200, 'FIN', 'FINANCE');

EXEC sa_components.create_compartment('DOC_POLICY', 100, 'HR', 'HUMAN_RESOURCE');

4。创建分组:

EXEC sa_components.create_group('DOC_POLICY', 10, 'ALL', 'ALL_REGIONS');

EXEC sa_components.create_group('DOC_POLICY', 20, 'WEST','WEST_REGION', 'ALL');

EXEC sa_components.create_group('DOC_POLICY', 30, 'EAST', 'EAST_REGION', 'ALL');

((级别:分隔:组) 组成标签)(就是对于某个部门某个区域的用户的数据(记录)分别分配一个不同的标记,也就是标签的数字号,对用户也

分配同样的标记)

5。创建标签:

EXEC sa_label_admin.create_label('DOC_POLICY', '10000', 'PUBLIC', TRUE);

EXEC sa_label_admin.create_label('DOC_POLICY', '20200','INTERNAL:HR:WEST', TRUE);

EXEC sa_label_admin.create_label('DOC_POLICY', '20400','INTERNAL:FIN:EAST', TRUE);

EXEC sa_label_admin.create_label('DOC_POLICY', '30900','INTERNAL:HR,FIN:ALL', TRUE);

6。向表应用策略:

EXEC sa_policy_admin.apply_table_policy ( policy_name =>'DOC_POLICY',schema_name=>'TS',table_name=>'DOCUMENT',table_options=>'LABEL_DEFAULT,READ_CONTROL,WRITE_CONTROL');

7。向用户分配标签:

EXEC sa_user_admin.set_user_labels -

( policy_name => 'DOC_POLICY' -

, user_name => 'TEST' -

, max_read_label => 'INTERNAL:HR,FIN:ALL' -

, max_write_label => 'INTERNAL:HR,FIN:ALL' -

, min_write_label => 'PUBLIC' -

, def_label => 'INTERNAL:HR,FIN:ALL' -

, row_label => 'PUBLIC');

EXEC sa_user_admin.set_user_labels -

( policy_name => 'DOC_POLICY' -

, user_name => 'HR' -

, max_read_label => 'INTERNAL:HR:WEST' -

, max_write_label => 'INTERNAL:HR:WEST' -

, min_write_label => 'PUBLIC' -

, def_label => 'INTERNAL:HR:WEST' -

, row_label => 'PUBLIC');

EXEC sa_user_admin.set_user_labels -

( policy_name => 'DOC_POLICY' -

, user_name => 'SCOTT' -

, max_read_label => 'PUBLIC' -

, max_write_label => 'PUBLIC' -

, min_write_label => 'PUBLIC' -

, def_label => 'PUBLIC' -

, row_label => 'PUBLIC');

INSERT INTO ts.document VALUES(1, 'SHARE_WARE',CHAR_TO_LABEL('DOC_POLICY','PUBLIC'));

INSERT INTO ts.document VALUES (2, 'WEST_PAYROLL', 20200);

INSERT INTO ts.document VALUES (3, 'EAST_SALES', 20400);

INSERT INTO ts.document VALUES (4, 'COMP_PAYROLL', 30900);

8。测试:

SQL> CONN test/test

已连接。

SQL> INSERT INTO TS.document VALUES

2 (1, 'SHARE_WARE',CHAR_TO_LABEL

3 ('DOC_POLICY','PUBLIC'));

已创建 1 行。

SQL> INSERT INTO TS.document VALUES

2 (2, 'WEST_PAYROLL', 20200);

已创建 1 行。

SQL> INSERT INTO TS.document VALUES

2 (3, 'EAST_SALES', 20400);

已创建 1 行。

SQL> INSERT INTO TS.document VALUES

2 (4, 'COMP_PAYROLL', 30900);

已创建 1 行。

SQL>

SQL> commit;

提交完成。

SQL> SELECT docname, doc_label

2 FROM ts.document;

DOCNAME DOC_LABEL

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

SHARE_WARE 10000

WEST_PAYROLL 20200

EAST_SALES 20400

COMP_PAYROLL 30900

SQL> desc ts.document

名称 是否为空? 类型

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

DOCID NUMBER

DOCNAME VARCHAR2(60)

DOC_LABEL NUMBER(10)

SQL> conn hr/hr

已连接。

SQL> SELECT docname, doc_label

2 FROM ts.document;

DOCNAME DOC_LABEL

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

SHARE_WARE 10000

WEST_PAYROLL 20200

SQL> conn hr/hr

已连接。

SQL>

SQL> INSERT INTO TS.document VALUES

2 (1, 'SHARE_WARE',CHAR_TO_LABEL

3 ('DOC_POLICY','PUBLIC'));

已创建 1 行。

SQL> INSERT INTO TS.document VALUES

2 (2, 'WEST_PAYROLL', 20200);

已创建 1 行。

SQL> INSERT INTO TS.document VALUES

2 (3, 'EAST_SALES', 20400);

INSERT INTO TS.document VALUES

*

第 1 行出现错误:

ORA-12406: 未经策略 DOC_POLICY 授权的 SQL 语句

ORA-06512: 在 "LBACSYS.LBAC_STANDARD", line 20

ORA-06512: 在 "LBACSYS.LBAC$AI0_45004", line 1

ORA-04088: 触发器 'LBACSYS.LBAC$AI0_45004' 执行过程中出错

SQL> INSERT INTO TS.document VALUES

2 (4, 'COMP_PAYROLL', 30900);

INSERT INTO TS.document VALUES

*

第 1 行出现错误:

ORA-12406: 未经策略 DOC_POLICY 授权的 SQL 语句

ORA-06512: 在 "LBACSYS.LBAC_STANDARD", line 20

ORA-06512: 在 "LBACSYS.LBAC$AI0_45004", line 1

ORA-04088: 触发器 'LBACSYS.LBAC$AI0_45004' 执行过程中出错

SQL> conn scott/tiger

已连接。

SQL> INSERT INTO TS.document VALUES

2 (1, 'SHARE_WARE',CHAR_TO_LABEL

3 ('DOC_POLICY','PUBLIC'));

已创建 1 行。

SQL> INSERT INTO TS.document VALUES

2 (2, 'WEST_PAYROLL', 20200);

INSERT INTO TS.document VALUES

*

第 1 行出现错误:

ORA-12406: 未经策略 DOC_POLICY 授权的 SQL 语句

ORA-06512: 在 "LBACSYS.LBAC_STANDARD", line 20

ORA-06512: 在 "LBACSYS.LBAC$AI0_45004", line 1

ORA-04088: 触发器 'LBACSYS.LBAC$AI0_45004' 执行过程中出错

SQL> INSERT INTO TS.document VALUES

2 (3, 'EAST_SALES', 20400);

INSERT INTO TS.document VALUES

*

第 1 行出现错误:

ORA-12406: 未经策略 DOC_POLICY 授权的 SQL 语句

ORA-06512: 在 "LBACSYS.LBAC_STANDARD", line 20

ORA-06512: 在 "LBACSYS.LBAC$AI0_45004", line 1

ORA-04088: 触发器 'LBACSYS.LBAC$AI0_45004' 执行过程中出错

SQL> INSERT INTO TS.document VALUES

2 (4, 'COMP_PAYROLL', 30900);

INSERT INTO TS.document VALUES

*

第 1 行出现错误:

ORA-12406: 未经策略 DOC_POLICY 授权的 SQL 语句

ORA-06512: 在 "LBACSYS.LBAC_STANDARD", line 20

ORA-06512: 在 "LBACSYS.LBAC$AI0_45004", line 1

ORA-04088: 触发器 'LBACSYS.LBAC$AI0_45004' 执行过程中出错

SQL>

对于DML(insert,update,delete)操作呢?其实,Oracle是自动在表上添加了触发器,这一点我们可以在设置完label以后,

通过dba_triggers视图验证,添加的是INSERT AFTER EACH ROW,UPDATE AFTER EACH ROW和DELETE BEFORE EACH ROW三个trigger

触发器 'LBACSYS.LBAC$AI0_45004'代码:

DECLARE v_allowed NUMBER;

new_label LBAC_LABEL;

BEGIN

IF lbac_session.policy_disabled('DOC_POLICY') OR (lbac_standard.secure_context('LBAC$0_LAB', 'LBAC$BYPASS') = 2)

THEN RETURN;

END IF;

IF :new.DOC_LABEL IS NULL OR (NOT lbac_utl.data_label(:new.DOC_LABEL))

THEN

lbac_standard.raise_facility_error('TRUSTED', 'LBAC', 12406, 'DOC_POLICY');

END IF;

IF bitand(nvl(lbac_standard.secure_context('LBAC$LABELS', :new.DOC_LABEL),0),3)=0

THEN

lbac_standard.raise_facility_error('TRUSTED', 'LBAC', 12406, 'DOC_POLICY');

END IF;

IF bitand(nvl(lbac_standard.secure_context('LBAC$LABELS',:new.DOC_LABEL),0),2)=2

THEN

lbac_services.audit_privilege('DOC_POLICY',2,0,TRUE,'insert privilege used');

END IF;

END;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值