Java EE 应用中对前端用户的数据库操作的审计.pdf

Java EE 应用中对前端用户的数据库操作的审计.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java EE 应用中对前端用户的数据库操作的审计

Java EE 应用中对前端用户的数据库操作的审 计 如何在 DB2 和 Oracle 的数据库连接上传递用户标识的实践 引言 在一些对安全审计有较高要求的系统中,管理员需要查看每个应用程序的登录用户执行了哪些数据库操作, 而通常我们应用程序在访问数据库时,都是公用同一个数据库的认证用户去获取数据库连接的,这样我们 的登录用户的标识无法传递到数据库端。而很多客户是需要在数据库端能审计登录用户的操作。当然,在 应用服务器端的程序里写日志,记录下每个登录用户执行了哪些操作也能达到审计的需求,但这种方式往 往会有性能的开销。经过实践,本文介绍的解决途径是将用户标识通过数据库连接传递到数据库端,从而 完成在数据库端的审计,这是一种较轻量级的方式。 回页首 解决方案简述 在 JDBC 4.0 之前,JDBC 规范没有提供传递用户标识的 API ,我们只能通过数据库厂商提供的 API 去 实现。考虑到这一需求的实用性,JDBC 4.0 为我们增加了相应的 API 。目前,Oracle 11g Release 1 (11.1) 和 DB2 9.5 的 JDBC driver 都支持 JDBC 4.0 规范,但在此之前的版本中,我们只能借助于厂商提供的 API 。本文介绍了使用这些 API 的一些实践,同时说明了如何在数据库端查看传递过来的用户标识。 传递用户标识的基本模式为: 数据库会话(session ) JDBC framework (或O/R mapping 框架)如 Hibernate 和 iBatis 都提供了 session 的概念,session 是对数据库 连接和事务使用的封装。一个数据库会话期间通常使用一个连接,对应一个事务。 对于纯 JDBC 来说,获得一个数据库连接就相当于开启了一个会话。 1. 打开一个数据库会话。 2. 设置用户标识信息。 3. 执行一些数据库操作。 4. 清除连接上的用户标识。 5. 关闭数据库会话。 其中,清除连接上的标识非常重要,因为我们通常使用的数据库连接都是逻辑连接,关闭逻辑连接后其对 应的物理连接 (TCP/IP 连接 ) 并未关闭,所以清除连接上的标识信息可以确保不影响别的数据库逻辑连 接。 回页首 JDBC 4.0 提供的支持 Java 6 支持 JDBC 4.0 规范,在 JDBC 4.0 中提供了在数据库连接java.sql.Connection 上传递用户信 息的支持。在该接口中提供了两个方法: void setClientInfo(String name, String value) throws SQLClientInfoException; void setClientInfo(Properties properties) throws SQLClientInfoException; 第一个方法允许我们在 Connection 上传递三个属性:  ApplicationName:访问数据库的应用程序名称。  ClientUser:访问数据库的用户标识,这个用户和建立数据库连接的用户是不同的。建立数据库 连接的用户是被能数据库认证和被授权过的用户。  ClientHostname:访问数据库客户端的主机名。 第二个方法和第一个方法功能类似,只是将参数放到了一个 Properties 对象中。我们通常 setClientInfo(“ClientUser” , userId) 将用户标识附加在数据库连接上。使用该方法的常见模式是: 清单 1. 使用 JDBC 4.0 API 传递用户标识 Connection conn = getConnection(); conn.setClientInfo(ClientUser , currentUserId); //do something on the connection conn.setClientInfo(ClientUser , null); conn.close(); 注意,清除连接上的用户标识的方式是将标识置为空。下面我们针对两种的常用数据库类型介绍标识传递 的方法。

文档评论(0)

almm118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档