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


     

  • 相关阅读:
    使用积分图像统计元素
    compareHist
    均值平移算法
    课后作业-阅读任务-阅读提问-1
    《对软件工程课程的期望》
    自我介绍
    作业
    结对-结对编项目作业名称-需求分析
    对软件工程课程的期望
    自我介绍
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299550.html
Copyright © 2020-2023  润新知