VPD全称Virtual Private Database的简单演示

/*
VPD全称Virtual Private Database,这个技术提供了对数据库信息的细粒度访问控制官方文,本文主要简单演示一下这一个实现的流程,希望对大家有帮助

*/–创建一张表
create table hand_sanwen_test01(
table_id number,
table_name varchar2(100)
)

–插入test数据
insert into hand_sanwen_test01 values (1,’test01′);
insert into hand_sanwen_test01 values (2,’test02′);
insert into hand_sanwen_test01 values (3,’test03′);

–此时查询肯定是返回三条记录
SELECT * FROM hand_sanwen_test01;

–现在需要实现一个场景,就是返回table_id小于3的数据
–1.使用视图来实现
–1.1创建视图,加上table_id <3的限制
create or replace view hand_sanwen_test01_v as select * from hand_sanwen_test01 where table_id <3;
–1.1 查询视图,可以完成对应条件
SELECT * FROM hand_sanwen_test01_v;

–2.使用VPD技术来实现
–2.1首先添加一个函数
CREATE or replace FUNCTION f_limited_query_t (s_schema IN VARCHAR2,
s_object IN VARCHAR2)
RETURN VARCHAR2
AS
BEGIN
RETURN ‘table_id <3′;
END;
–2.2将函数与需要保护的表进行关联
BEGIN
DBMS_RLS.add_policy (object_schema => ‘APPS’,
object_name => ‘HAND_SANWEN_TEST01′,
policy_name => ‘POLICY_LIMITED_QUERY_T’,
function_schema => ‘APPS’,
policy_function => ‘F_LIMITED_QUERY_T’);
END;
–2.3查询表结果测试一下
SELECT * FROM HAND_SANWEN_TEST01;

–2.4 删除VDP的限制
BEGIN
DBMS_RLS.drop_policy (object_schema => ‘APPS’,
object_name => ‘HAND_SANWEN_TEST01′,
policy_name => ‘POLICY_LIMITED_QUERY_T’);
END;

–2.5查询结果,发现限制被去除了
SELECT * FROM HAND_SANWEN_TEST01;

 

参考文档: http://docs.oracle.com/cd/B19306_01/network.102/b14266/apdvpoli.htm#i1009600

共有 22 条评论

Top