技术开发 频道

Oracle 9i审计技术应用详解

如何实现应用层操作和数据库动作的关联

通过研究Oracle数据库系统的SYS_CONTEXT来关联应用层动作和数据库的动作。USERENV是Oracle提供的一个命名空间,用来保存当前的会话信息。我们在进行审计日志的采集的同时,可以通过Oracle数据库系统提供的SYS_CONTEXT ('USERENV', 'SESSION_ID')来得到数据库的会话ID,然后将数据库会话ID也作为审计日志的一个列属性进行存储。这样,应用层的日志就存储了数据库会话ID。而我们的数据库层审计,会话ID也是一个必不可少的审计信息。这样,通过会话ID的关联,我们就可以把应用层的动作和数据库系统的相应数据处理动作关联起来,这也更加增强了审计的强度。如图所示,应用层的一个添加用户的动作将通过数据库会话ID和数据库层的审计日志进行关联。

另外,我们还可以通过以下方式进行关联——使用CLIENT_IDENTIFIER。
 
应用程序上下文是一组可用于数据库会话的名字/值对。Oracle 9i有预定义的应用程序上下文名字空间USERENV,它含有用户会话信息,包括预定义的属性CLIENT_IDENTIFIER,我们可以稍加变更,将它用于保持Web用户标识符。  
  
从servlet或Enterprise JavaBeans (EJB)会话bean,应用程序代码将从Web请求检索用户名,然后调用内部PL/SQL过程设置CLIENT_IDENTIFIER: 

  String userName = request.getRemoteUser();   ...(set up the JDBC connection)...   PreparedStatement ps = conn.prepareCall(   "begin dbms_session.set_identifier(?);   end;");   ps.setString(1, username);   ps.execute();

我们可以通过“SELECT sys_context('userenv', 'client_identifier') FROM dual;”来得到我们设定的Web用户标识符。但是,这种方法不够安全,因为任何人都能设置这个上下文值,因此必须借助额外的安全性措施,如细粒度的访问控制和安全的应用程序角色等,同时,应用程序还应在将数据库连接返回给连接池之前清除CLIENT_IDENTIFIER属性。

结论

本篇文章主要深入研究了Oracle数据库系统的审计特性,为数据库管理人员提供了一些实施数据库系统层审计的方案。同时,对应用系统的开发人员实现应用层的安全审计具有重要的借鉴意义。Oracle的审计特性可以帮助开发人员实现一个完善的安全审计子系统,从而保证整个系统的安全体系的完善,为其提供强大的抗抵赖服务。


0
相关文章