VPD全称Virtual Private Database,这个技术提供了对数据库信息的细粒度访问控制。关于VPD的更多描述性信息可通过Oracle官方文档获得:http://download.oracle.com/docs/cd/B19306_01/network.102/b14266/apdvpoli.htm#i1009600
通过一个具体案例,体验一下VPD带给我们的功能特点。

1.初始化环境
构造表T,其中包含一个字段X。
sec@ora10g> create table t (x number);
sec@ora10g> insert into t values (1);
sec@ora10g> insert into t values (2);
sec@ora10g> insert into t values (10001);
sec@ora10g> insert into t values (10002);
sec@ora10g> commit;
sec@ora10g> select * from t;

X
----------
         1
         2
     10001
     10002

2.问题场景描述
禁止查询T表中X列值大于10000的数据。

3.实现方法一:使用视图
这种方法可能是大家都很容易想到的,实现起来相对简单。但无法真正做到禁止访问基础表。
sec@ora10g> create view v_t as select * from t where x <=10000;

View created.

sec@ora10g> select * from v_t;

X
----------
         1
         2

此时如果直接查询基础表t,仍然可以获得说有的数据。
sec@ora10g> select * from t;

X
----------
         1
         2
     10001
     10002

4.实现方法二:使用VPD
1)创建VPD需要的函数,这里给出的名字是f_limited_query_t。
CREATE OR REPLACE FUNCTION f_limited_query_t (s_schema IN VARCHAR2,
                                              s_object IN VARCHAR2)
   RETURN VARCHAR2
AS
BEGIN
   RETURN 'X <= 10000';
END;
/

Function created.

2)将函数与需要保护的表进行关联
BEGIN
   DBMS_RLS.add_policy (object_schema   => 'SEC',
                        object_name     => 'T',
                        policy_name     => 'POLICY_LIMITED_QUERY_T',
                        function_schema => 'SEC',
                        policy_function => 'F_LIMITED_QUERY_T');
END;
/

PL/SQL procedure successfully completed.

3)验证VPD效果
此时在sec用户下直接查询t表,获得的也仅仅是我们要求的数据范围。
sec@ora10g> select * from t;

X
----------
         1
         2

即便是连接到其他用户依然无法获得sec用户下t表隐藏掉的数据。
sec@ora10g> conn secooler/secooler
Connected.
secooler@ora10g> select * from sec.t;

X
----------
         1
         2

只有sys用户有权查看到sec用户下t表的全部数据
sec@ora10g> conn / as sysdba
Connected.
sys@ora10g> select * from sec.t;

X
----------
         1
         2
     10001
     10002

4)去掉VPD对数据访问的限制
我们可以使用DBMS_RLS.drop_policy来完成这个任务。
secooler@ora10g> conn sec/sec
Connected.

BEGIN
   DBMS_RLS.drop_policy (object_schema   => 'SEC',
                         object_name     => 'T',
                         policy_name     => 'POLICY_LIMITED_QUERY_T');
END;
/

PL/SQL procedure successfully completed.

此时可获得T表的全部数据
sec@ora10g> select * from t;

X
----------
         1
         2
     10001
     10002

5.小结
这里给出的是VPD最简单的一种使用方法,在实际应用中需求可能会比较复杂,但通过分析并仔细定制,VPD都可以胜任。
欢迎大家分享关于VPD技术的具体应用案例。

Good luck.

secooler
10.09.07

-- The End --

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-673062/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/519536/viewspace-673062/

【VPD】使用Oracle VPD(Virtual Private Database)限制用户获取数据的范围相关推荐

  1. oracle vpd策略,oracle vpd 策略查询

    Oracle VPD策略示例 - abce - 博客园 2015年12月14日 Oracle VPD策略示例 1.未创建前使用oe用户登录查询: + View Code + View Code 2.创 ...

  2. mysql实现vpd_VPD(Virtual Private Database) 简单演示

    VPD :Virtual Private Database , 是一种限制对数据库信息细粒度的访问控制技术.实现的关键在于:RLS(Row Level Security) 行级权限控制,通过 ORAC ...

  3. mysql实现vpd_Oracle Virtual Private Database(VPD) 初体验

    注:本文为原创,作为学习交流使用,转载请标明作者及出处,作者保留追究法律责任的权力. Lumen Su 前几周初略学习了Oracle的VPD技,做了几个试验,也在EBS系统上测试了一下.总结如下,有些 ...

  4. VPD(Virtual Private Database)

    VPD可以直接在表,视图和同义词上实施安全策略,提供行或列级别的安全性 VPD可应用于SELECT, INSERT, UPDATE, INDEX和DELETE命令 VPD是在SQL访问受VPD保护的对 ...

  5. Oracle VPD

    VPD = Virtual Private Database.同义词有RLS : Row Level Security, FGAC: Fine Grained Access Control. 用于行级 ...

  6. MPLS Virtual Private Network

    目录 传统Virtual Private Network 1.产生 2.网络结构 3.Virtual Private Network模型 3.1.Overlay Virtual Private Net ...

  7. ORACLE VPD方案

    ORACLE VPD方案DROP USER VPD CASCADE; DROP ROLE R_VPD; CREATE USER VPD IDENTIFIED BY VPD; CREATE ROLE R ...

  8. mysql公有库和私有库_带有公有和私有子网的 VPC (NAT) - Amazon Virtual Private Cloud

    带有公有和私有子网的 VPC (NAT) 这个场景的配置包括一个有公有子网和私有子网的 Virtual Private Cloud (VPC).如果您希望运行面向公众的 Web 应用程序,并同时保留不 ...

  9. 什么是VPS(Virtual Private Server 虚拟专用服务器)技术?

    VPS VPS(Virtual Private Server 虚拟专用服务器)技术,将一台服务器分割成多个虚拟专享服务器的优质服务.实现VPS的技术分为容器技术,和虚拟化技术 [1]  .在容器或虚拟 ...

最新文章

  1. R语言时间序列(time series)分析实战:简单指数平滑法预测
  2. git pull request工作模式
  3. vector的resize()和reserve()函数
  4. 20180925-4 单元测试,结对
  5. java注解大全_java开发注解大全
  6. java比python难_python java JAVA比python难多少?
  7. __stdcall、__cdecl 、CALLBACK 几种函数修饰符
  8. 操作系统原理:连续的内存分配
  9. [设计模式笔记]4.建造者模式
  10. JAVA程序设计----IO流(下)
  11. 光伏市场抢装潮6月底前或重现
  12. 被嫌弃的互联网的 “一生”(上)
  13. 如何VMare虚拟机里安装Mac操作系统(图文详解)
  14. ahjesus Axure RP 7.0注册码
  15. 【C012】Python - 基础教程学习(三)
  16. Filecoin Gas基础费率升至5.06 nanoFIL
  17. vue(vue-cli+vue-router)+babel+webpack项目搭建入门(三)
  18. Atitit.通过null 参数 反射  动态反推方法调用
  19. MySQL使用EXPLAIN查看SQL的执行计划
  20. java毕业设计大学生体检管理系统Mybatis+系统+数据库+调试部署

热门文章

  1. 一种近似AMP音频增益转dB的优化写法:20.0*log10(amp)
  2. 【总结】手机图片预览插件photoswipe使用总结
  3. 使用高德sdk时,提供SHA1
  4. 投资的心里按摩(一):远离噪声
  5. B站网页视频加速设置
  6. Flutter Checkbox 复选框
  7. 关于type_info与typeid
  8. Metaq原理与应用
  9. 实现线程同步的几种方法
  10. 概论第7章_参数估计_点估计的评价标准_相合性_无偏性_有效性