1、什么是VPD?
虚拟专用数据库 (VPD)提供了角色和视图无法提供的行级访问控制。对于互联网访问,虚拟专用数据库可以确保在线银行的客户只能看到他们自己的帐户。Web托管公司可以在同一Oracle 数据库中维护多个公司的数据,但只允许每个公司查看其自身数据。
在企业内部,虚拟数据库可在应用程序部署方面降低拥有成本。可以在数据库服务器一次实现安全性,而不用在访问数据的每个应用程序中分别实现安全性。因为是在数据库中实施安全性,所以不管用户访问数据的方式如何,安全性较以前更高。访问即席查询工具或新报表生成程序的用户不再能绕过安全环节。
2、VPD是如何工作的?
将一个或多个安全策略与表或视图关联后,就可以实现虚拟专用数据库。对带安全策略的表进行直接或间接访问时,数据库将调用一个实施该策略的函数。策略函数返回一个访问条件(WHERE子句),即谓词。应用程序将它附加到用户的 SQL 语句,从而动态修改用户的数据访问权限。
你可以通过编写一个存储过程将 SQL 谓词附加到每个 SQL 语句(用于控制该语句的行级别访问权限)来实施 VPD。如下图,Bob 和 Anna 为两名经理,他们可以查看他们所管理的人员信息,Tim作为普通职员,就只能查看自己的信息。
使用Oracle VPD实现:
3、实现思路?
实现思路大概如下图
重写JDBC部分驱动以便后面做手脚
解析输入SQL,并根据VPD上下文,元数据信息以及VPD规则进行SQL的重新拼装
针对需要对列权限处理,需要保存必要元数据信息,并且对结果集进行二次处理
参考Oracle Vpd的元数据表设计
实现效果
参考连接:
http://mohamednabeel.blogspot.com/2014/08/oracle-virtual-private-database-vpd.html
https://oracle-base.com/articles/8i/virtual-private-databases