EBS技术开发之VPD策略

原创 2013年12月04日 22:49:33

VPD (虚拟专用数据库的简称),主要作用是根据运行环境的上下文,隐式的添加条
件。 好处是在数据库层解决细粒度的角色权限访问,避免在中间层写大量代码;坏处
是数据屏蔽的逻辑太隐蔽了,对于分析查找问题带来一定的困扰

一个简单的例子带你体验VPD策略

--1、在APPS 中创建表,赋权给PO, ONT用户
create table hand_vpd_test_tb1
(column1  varchar2(30),
 db_user  varchar2(30)
 )

grant select ,insert, update on hand_vpd_test_tb1 to po,ont;


 
--2、创建策略函数 package
--使用 hand_vpd_tst_security.pck 创建策略函数包
--赋权
grant execute on  apps.hand_vpd_tst_security to public;
CREATE PUBLIC SYNONYM hand_vpd_tst_security FOR apps.hand_vpd_tst_security;
 
--3、添加VPD策略 
begin
  
 DBMS_Rls.Add_Policy('APPS', 'HAND_VPD_TEST_TB1', 'INSERT_POLICY','APPS', 'HAND_VPD_TST_SECURITY.INSERT_SECURITY','INSERT', TRUE);

 DBMS_Rls.Add_Policy('APPS', 'HAND_VPD_TEST_TB1', 'SELECT_POLICY','APPS', 'HAND_VPD_TST_SECURITY.SELECT_SECURITY','SELECT');

end;

select * from DBA_POLICIES a where a.object_name = 'HAND_VPD_TEST_TB1';

-- 删除VPD策略(备用)
begin
  dbms_rls.drop_policy('APPS','HAND_VPD_TEST_TB1','USER_DATA_INSERT_POLICY');
  dbms_rls.drop_policy('APPS','HAND_VPD_TEST_TB1','USER_DATA_SELECT_POLICY');
end;  
  

--4、Select , Insert  测试
begin
 insert into hand_vpd_test_tb1 values ('test1-po','PO');
 insert into hand_vpd_test_tb1 values ('test1-ont','ONT');
end;

--5、切换到 PO 用户登录
select * from apps.hand_vpd_test_tb1
--结果:
--策略函数执行出错: 

--trace 发现是ora-06550错误,
select value from v$parameter where name = 'user_dump_dest';
alter session set tracefile_identifier = 'Hand_vpd_test2';
alter session set sql_trace=true;
select * from apps.hand_vpd_test_tb1
alter session set sql_trace=false;

--表面是SELECT_SECURITY未声明,实际是XX用户执行策略函数时需要访问被施加策略的对象:hand_vpd_test_tb1,因为对该对象无权限,而导致报此错误;
--解决方案
grant select ,insert, update on hand_vpd_test_tb1 to public;

--6 再次测试:
-- 切换到 PO 用户登录
select * from apps.hand_vpd_test_tb1
--结果只出现  DB_USER=PO的记录;

--7 做insert 测试

 insert into apps.hand_vpd_test_tb1 values ('test1-po','PO');
 --结果:顺利插入
 insert into apps.hand_vpd_test_tb1 values ('test1-ont','ONT');
 --结果:报 ORA-28115: policy with check option violation 错误


 

相关文章推荐

EBS VPD介绍和使用实例

主要介绍VPD和VPD的使用方法,后面结合了一下MOAC,全方位地解释了在MOAC中如何使用VPD。...

利用Oracle VPD(虚拟专用数据库)实现类似EBS R12里的多OU屏蔽

EBS R11通过建立带有CLIENT_INFO过滤条件的视图来实现多OU屏蔽,而R12使用的则是VDP(Virtual Private Database)来实现,关联的package是MO_GLOB...
  • t0nsha
  • t0nsha
  • 2012年04月03日 16:23
  • 2514

技术开发人员应该多吃的15种健康食品

生活节奏紧加快、工作压力大等因素导致大脑缺乏营养,出现用脑过度的现象;因而出现记忆衰退,精神不集中,做事易烦躁等情况。此时应该及时补充大脑所缺失的营养,诸如维生素、糖分、蛋白质、微量元素等。 本...

基于menge的人群仿真技术开发(初级)

最近在进行仿真技术开发,希望把自己的开发历程记下来,欢迎大家交流。     我是基于menge开发的,官网地址:http://gamma.cs.unc.edu/Menge/(貌似需要翻墙,学计算机的...

看完,感触很多 “IT技术开发人员获得成功的六大步骤”

IT技术开发人士成功的6大步骤 一个前辈在移民加拿大后写的文章,写得不错,值得借鉴,转来给大家看看,也给自己   序言:经过001多年的洗礼,认识了这里这么多的JJMMGGDD,前几天刚得到签证...
  • xum2008
  • xum2008
  • 2012年06月21日 13:03
  • 1418

【后台技术开发】Docker的镜像和容器的区别(10张图让你深入理解Docke的r容器和镜像)

这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行中的容器之间的区别。 当我对Docker技术...
  • ourpush
  • ourpush
  • 2016年08月27日 22:29
  • 303

Java岗位面试题(南京才丰软件技术开发有限公司)

应届生Java工程师面试题

深度解析IOS技术开发概述要点

iOS 技术概述是针对iOS平台新手的介绍指南。它简要介绍一些对开发过程有影响的技术和工具,并且提供相关文档和其他信息来源链接。本文档非常适合开发新手用于熟悉iOS平台。有经验的开发人员可以将本文档作...

应用Java技术开发WAP应用程序

我们采用Tomcat作为web服务器,如果你对如何使用tomcat还不熟悉请参考相关资料。通常我们开发WAP应用程序的时候都是手写wml脚本,其实我们可以借助java的Servlet/jsp技术开发W...

利用RMI技术开发聊天案例(尚有疑问,待解决!!!)

接口文件:IChatClient.java package com.cjq.rmi.inter; import java.rmi.Remote; import java.rmi.RemoteE...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EBS技术开发之VPD策略
举报原因:
原因补充:

(最多只允许输入30个字)