【VPD】使用Oracle VPD(Virtual Private Database)限制用户获取数据的范围
通过一个具体案例,体验一下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)限制用户获取数据的范围相关推荐
- oracle vpd策略,oracle vpd 策略查询
Oracle VPD策略示例 - abce - 博客园 2015年12月14日 Oracle VPD策略示例 1.未创建前使用oe用户登录查询: + View Code + View Code 2.创 ...
- mysql实现vpd_VPD(Virtual Private Database) 简单演示
VPD :Virtual Private Database , 是一种限制对数据库信息细粒度的访问控制技术.实现的关键在于:RLS(Row Level Security) 行级权限控制,通过 ORAC ...
- mysql实现vpd_Oracle Virtual Private Database(VPD) 初体验
注:本文为原创,作为学习交流使用,转载请标明作者及出处,作者保留追究法律责任的权力. Lumen Su 前几周初略学习了Oracle的VPD技,做了几个试验,也在EBS系统上测试了一下.总结如下,有些 ...
- VPD(Virtual Private Database)
VPD可以直接在表,视图和同义词上实施安全策略,提供行或列级别的安全性 VPD可应用于SELECT, INSERT, UPDATE, INDEX和DELETE命令 VPD是在SQL访问受VPD保护的对 ...
- Oracle VPD
VPD = Virtual Private Database.同义词有RLS : Row Level Security, FGAC: Fine Grained Access Control. 用于行级 ...
- MPLS Virtual Private Network
目录 传统Virtual Private Network 1.产生 2.网络结构 3.Virtual Private Network模型 3.1.Overlay Virtual Private Net ...
- ORACLE VPD方案
ORACLE VPD方案DROP USER VPD CASCADE; DROP ROLE R_VPD; CREATE USER VPD IDENTIFIED BY VPD; CREATE ROLE R ...
- mysql公有库和私有库_带有公有和私有子网的 VPC (NAT) - Amazon Virtual Private Cloud
带有公有和私有子网的 VPC (NAT) 这个场景的配置包括一个有公有子网和私有子网的 Virtual Private Cloud (VPC).如果您希望运行面向公众的 Web 应用程序,并同时保留不 ...
- 什么是VPS(Virtual Private Server 虚拟专用服务器)技术?
VPS VPS(Virtual Private Server 虚拟专用服务器)技术,将一台服务器分割成多个虚拟专享服务器的优质服务.实现VPS的技术分为容器技术,和虚拟化技术 [1] .在容器或虚拟 ...
最新文章
- R语言时间序列(time series)分析实战:简单指数平滑法预测
- git pull request工作模式
- vector的resize()和reserve()函数
- 20180925-4 单元测试,结对
- java注解大全_java开发注解大全
- java比python难_python java JAVA比python难多少?
- __stdcall、__cdecl 、CALLBACK 几种函数修饰符
- 操作系统原理:连续的内存分配
- [设计模式笔记]4.建造者模式
- JAVA程序设计----IO流(下)
- 光伏市场抢装潮6月底前或重现
- 被嫌弃的互联网的 “一生”(上)
- 如何VMare虚拟机里安装Mac操作系统(图文详解)
- ahjesus Axure RP 7.0注册码
- 【C012】Python - 基础教程学习(三)
- Filecoin Gas基础费率升至5.06 nanoFIL
- vue(vue-cli+vue-router)+babel+webpack项目搭建入门(三)
- Atitit.通过null 参数 反射 动态反推方法调用
- MySQL使用EXPLAIN查看SQL的执行计划
- java毕业设计大学生体检管理系统Mybatis+系统+数据库+调试部署