SYS_R12 MOAC多组织底层技术实现技能分析(Oracle VPD) (案例)

2014-05-30 Created By BaoXinjian

一、
介绍


前面一直留存对Oracle R12
多组织走访的片段迷惑,所以查询了部分系资料,并介绍实现R12 MOAC的Oracle
VPD技术

Oracle VPD全称Virtual Private Database,
Oracle的一模一样种植控制数据访问的内安全策略之一

Oracle数据安全策略访问实现方式

  •  Role-based security
    • create role cust_role;
    • grant select on customer to cust_role;
    • grant select, update on orders to cust_role;
    • grant cust_role to scott;
  •  Grant-execute security
    • grant execute on procedure to cust_role;
  •  Virtual private databases
    • 以下也详细介绍

 

其次、
案例 – 实现模仿R12
MOAC对客制化的表添加标准大多组织访问控制安全策略


例如, ap_invoices_all 和 
ap_inovices访问的分别

当没有初始化mo_global.set_policy_context之前,ap_invoices_all
是得拜有的数, 而ap_invoices是不曾其他数返回的

当初始化mo_global.set_policy_context之后,ap_invoices_all
还是可以拜具有的多少,
而ap_invoices可以回到对承诺组织的记录,而其余团队的笔录并无让归

原因是,在视图ap_invoices添加了一个安全性策略,
mo_golbal.org_security

据此在模拟标准的MOAC功能建立对客制化表的大都组织走访,可以参见上述例子

树立一个基表(bxj_vpd_invoices_b),
用以存放有数据,不管发生没有经过mo_global初始化session都足以回到数据,
类似于基表ap_invoices_all的功能

建立一个视图(bxj_vpd_invoices_v),
此视图建立于基表之上,再拓展添加安全性策略,实现多组织走访,类似于视图ap_invoices的功能

Step1. 立基表

CREATE TABLE
bxj_vpd_invoices_b(

  invoice_id NUMBER,

  invoice_num VARCHAR(100),

  invoice_description
VARCHAR(240),

  org_id NUMBER

)

 Step2. 起视图

CREATE VIEW bxj_vpd_invoices_v
AS

  SELECT invoice_id, invoice_num,
invoice_description, org_id

FROM bxj_vpd_invoices_b;

 Step3. 预备测试资料,一画的org为204,
一笔画的org为889

INSERT INTO bxj_vpd_invoices_b VALUES
(1, ‘BXJ_20140520_01′,’BXJ_VPD_Show_With ORG204’, 204)

INSERT INTO bxj_vpd_invoices_b VALUES
(2, ‘BXJ_20140520_02′,’BXJ_VPD_Show_With ORG889’, 889)

Step4.
查询基表和视图都是可以返回所有片条记下

 

Step5.
最要害的等同步,对客制化视图bxj_vpd_invoics_v添加安全性策略dbms_rls.add_policy

Step6. 产看安全性策略是否建立成

Test1. 策建立成,进行测试,直接select
table bxj_vpd_invoics_v, 查询未返回外结果

Test2. 对session进行初始化

Test3. 再次直接select table
bxj_vpd_invoics_v,查询才回去一长ORG204的笔录,而ORG889的记录则并无出示,实现了针对客制化表的大半组织走访

 

老三、
案例 – 实现一个简易的客制的VPD安全策略对表数据访问的管控


急需:
对数码表bxj_invoice_total不显示invoice total > 1000的记录

Step1.创建
建一个大概的发明,并准备4笔测试数据

Step2. 查看原始数据,有4画资料

Step3.顶要害的同等步,建立VPD
Function,系统返回以下字段,作为VPD策略,其实个人感觉就是根据不同的尺度同条件去分别所而加以的标准化构成,来促成数量的访问控制

Step4. 通过API
dbms_rls.add_policy付给VPD策略

Step5. 检查VPD策略是否赋值成功

Test1.
一直询问已在客制化VPD策略的表,已依照VPD策略,只展示金额小于1000之记录

 

Thanks and Regards

相关文章