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', 'HA