Java EE操纵中对前端用户的数据库操作的审计[Java编程]
本文“Java EE操纵中对前端用户的数据库操作的审计[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
引言
在一些对安全审计有较高要求的系统中,管理员需求查看每个利用程序的登录用户履行了哪些数据库操作,而普通我们利用程序在拜候数据库时,都是公用同一个数据库的认证用户去获得数据库衔接的,这样我们的登录用户的标识无法传送到数据库端.而很多客户是需求在数据库端能审计登录用户的操作.当然,在利用服务器端的程序里写日记,记录下每个登录用户履行了哪些操作也能到达审计的需求,但这种方法常常会有性能的开销.经过实践,本文介绍的办理途径是将用户标识通过数据库衔接传送到数据库端,从而完成在数据库端的审计,这是一种较轻量级的方法.
办理筹划简述
在 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 来说,得到一个数据库衔接就相当于开启了一个会话.
翻开一个数据库会话.
设置用户标识信息.
履行一些数据库操作.
排除衔接上的用户标识.
关闭数据库会话.
此中,排除衔接上的标识非常重要,因为我们普通利用的数据库衔接都是逻辑衔接,关闭逻辑衔接后其对应的物理衔接 (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();
注意,排除衔接上的用户标识的方法是将标识置为空.下面我们针对两种的常用数据库范例介绍标识传送的办法.
针对 DB2 的标识传送
DB2 供应了 com.ibm.db2.jcc.DB2Connection,该类有下列办法,支持用户信息传送:
public void setDB2ClientUser(String s) throws SQLException;
public void setDB2ClientWorkstation(String s) throws SQLException;
public void setDB2ClientApplicationInformation(String s) throws SQLException;
public void setDB2ClientAccountingInformation(String s) throws SQLException;
以上是“Java EE操纵中对前端用户的数据库操作的审计[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |