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

1、什么是VPD?

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

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


2、VPD是如何工作的?

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

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

使用Oracle VPD实现:

3、实现思路?

实现思路大概如下图

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

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

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

参考Oracle 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麒思妙想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值