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

简介: 2014-05-30 Created By BaoXinjian 一、 介绍 之前一直存在对Oracle R12 多组织访问的一些疑惑,所以查询了一些相关资料,并介绍实现R12 MOAC的Oracle VPD技术 Oracle VPD全称Virtual Private Database, ...

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

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
6月前
|
JavaScript 前端开发 Java
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Jsp页面
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Jsp页面
|
6月前
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——OpSessionview实现
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——OpSessionview实现
|
6月前
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——EmpDao层代码
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——EmpDao层代码
|
6月前
|
Java
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Action的实现类
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Action的实现类
|
6月前
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——工具类
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——工具类
|
6月前
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——DeptDao层代码
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——DeptDao层代码
|
6月前
|
XML Java 数据库连接
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
|
16天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
2月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。 数据库没有备份,无法通过备份去恢复数据库。用户方联系北亚企安数据恢复中心并提供Oracle_Home目录中的所有文件,急需恢复zxfg用户下的数据。 出现“system01.dbf需要更多的恢复来保持一致性”这个报错的原因可能是控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。数据库恢复工程师对数据库文件进一步检测、分析后,发现sysaux01.dbf文件损坏,有坏块。 修复并启动数据库后仍然有许多查询报错,export和data pump工具使用报错。从数据库层面无法修复数据库。
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
|
2月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—异常断电导致Oracle数据库数据丢失的数据恢复案例
Oracle数据库故障: 机房异常断电后,Oracle数据库启库报错:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。数据库没有备份,归档日志不连续。用户方提供了Oracle数据库的在线文件,需要恢复zxfg用户的数据。 Oracle数据库恢复方案: 检测数据库故障;尝试挂起并修复数据库;解析数据文件。

推荐镜像

更多