浅谈基于JDBC实现虚拟专用数据库(VPD)

1、什么是VPD?

虚拟专用数据库 (VPD)提供了角色和视图无法提供的行级访问控制。 对于互联网访问,虚拟专用数据库可以确保在线银行的客户只能看到他们自己的帐户。Web托管公司可以在同一Oracle 数据库中维护多个公司的数据,但只允许每个公司查看其自身数据。

企业内部,虚拟数据库可在应用程序部署方面降低拥有成本。可以在数据库服务器一次实现安全性,而不用在访问数据的每个应用程序中分别实现安全性。因为是在数据库中实施安全性,所以不管用户访问数据的方式如何,安全性较以前更高。访问即席查询工具或新报表生成程序的用户不再能绕过安全环节。

2、VPD是如何工作的?

将一个或多个安全策略与表或视图关联后,就可以实现虚拟专用数据库。 对带安全策略的表进行直接或间接访问时,数据库将调用一个实施该策略的函数。策略函数返回一个访问条件(WHERE子句),即谓词。应用程序将它附加到用户的 SQL 语句,从而动态修改用户的数据访问权限。

你可以通过编写一个存储过程将 SQL 谓词附加到每个 SQL 语句(用于控制该语句的行级别访问权限)来实施 VPD。如下图,Bob 和 Anna 为两名经理,他们可以查看他们所管理的人员信息,Tim作为普通职员,就只能查看自己的信息。

浅谈基于JDBC实现虚拟专用数据库(VPD)

使用Oracle VPD实现:

浅谈基于JDBC实现虚拟专用数据库(VPD)

3、实现思路?

实现思路大概如下图

浅谈基于JDBC实现虚拟专用数据库(VPD)

  1. 重写JDBC部分驱动以便后面做手脚

  2. 解析输入SQL,并根据VPD上下文,元数据信息以及VPD规则进行SQL的重新拼装

  3. 针对需要对列权限处理,需要保存必要元数据信息,并且对结果集进行二次处理

参考Oracle Vpd的元数据表设计

浅谈基于JDBC实现虚拟专用数据库(VPD)

实现效果

浅谈基于JDBC实现虚拟专用数据库(VPD)

参考连接:

http://mohamednabeel.blogspot.com/2014/08/oracle-virtual-private-database-vpd.html

https://oracle-base.com/articles/8i/virtual-private-databases

https://blog.csdn.net/w892824196/article/details/84255143

原文 

http://mp.weixin.qq.com/s?__biz=MzI3MDU3OTc1Nw==&mid=2247484563&idx=1&sn=9d17a488ddc11bc76aa0eb3fb1652ec1

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 浅谈基于JDBC实现虚拟专用数据库(VPD)

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址