- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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();
注意,清除连接上的用户标识的方式是将标识置为空。下面我们针对两种的常用数据库类型介绍标识传递
的方法。
您可能关注的文档
- High Pressure Techniques - Neutron Sciences at Oak Ridge 高压技术-中子科学在橡树岭.pdf
- H人寿商业养老保险营销策略研究-new.pdf
- H省烟草商业企业全面预算管理优化研究-new.pdf
- IC 封装用基板材料在日本的新发展.pdf
- I CU患者脂肪乳剂应用注意事项.pdf
- IELTS写作整理材料By Raindy.pdf
- IHEPCD技术架构.pdf
- ielts口语考试对话范文WORD版.pdf
- IIC总线协议程序.pdf
- Immigration Nation - ImmigrationWorks USA - Home移民的国家immigrationworks美国家庭.pdf
文档评论(0)