EBS技术开发之VPD策略

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 错误


 

转载于:https://www.cnblogs.com/wanghang/p/6299550.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值