第1章 VPD介绍
虚拟专用数据库 (VPD,Virtual Private Database) 提供了角色和视图无法提供的行级访问控制。对于互联网访问,虚拟专用数据库可以确保在线银行的客户只能看到他们自己的帐户。Web托管公司可以在同一Oracle数据库中维护多个公司的数据,但只允许每个公司查看其自身数据。
在企业内部,虚拟数据库可在应用程序部署方面降低拥有成本。可以在数据库服务器一次实现安全性,而不用在访问数据的每个应用程序中分别实现安全性。因为是在数据库中实施安全性,所以不管用户访问数据的方式如何,安全性较以前更高。访问即席查询工具或新报表生成程序的用户不再能绕过安全环节。虚拟专用数据库是一项重要技术,使企业能够构建托管的、基于 Web 的应用程序。实际上,许多Oracle应用程序本身使用VPD实施数据分隔,包括Oracle SalesOnline.com和Oracle Portal等程序。
第2章 功能介绍
在大部份系统中,权限控制主要定义为模块进入权限的控制和数据列访问权限的控制(如:某某人可以进入某个控制,仓库不充许查看有关部门的字段等等)。
但在某些系统中,权限控制又必须定义到数据行访问权限的控制,此需求一般出现在同一系统,不同的相对独立机构使用的情况。(如:集团公司下属多个子部门,所有子部门使用同一套数据表,但不同子部门的数据相对隔离),绝大多数人会选择在View加上Where子句来进行数据隔离。此方法编码工作量大、系统适应用户管理体系的弹性空间较小,一旦权限逻辑发生变动,就可能需要修改权限体系,导致所有的View都必须修改。
为此,UniEAP Report特别提供了一种简便的方法,在sql执行之前实现权限控制。比如,同一段sql文,A部门人员A执行这段sql的时候,获得A部门的数据表,而B部人员B执行这段sql的则得到B部门的数据表。这种方法简便有效,编码工作量较小、系统适应用户管理体系。
第3章 实现步骤
3.1 实现抽象类
需实现抽象类com.neusoft.report.engine.util.BeforeDataSetJDBCConnection,实现其public void beforeConnection(String dsName, Connection conn)方法。
方法说明如下:
/**
* 在报表查询数据之前增加切面,用户可以在些实现对数据的处理工作。
*
* @param dsName
* 数据源名称
* @param conn
* 数据源连接
*/
public void beforeConnection(String dsName, Connection conn);
3.2 添加配置项
在路径\WEB-INF\conf\unieap\report\dataset-config.properties中添加配置项on_before_connection =<实现类>。
3.3 获取报表ID的方法
报表ID可以通过getReportId()方法获取。