图片:
应用程序用户与oracle审计记录中的关联性(课题关键技术点之一)_职场
       本文只起到穿针引线的作用,把课题中目前的技术难点,一一摆出,然后把搜到的相关资料暂行收藏,过往的看官,如有类似项目经验,不吝赐教!
       前一个问题(《oracle中关于审计参数audit_trail的讨论》),已经有了明确答案,audit_trail参数是不允许动态修改的参数,即:audit_trail在修改后只能重启动数据库才能生效。
     至此,在应用程序提供审计开/关的设想已经成为泡影,因为重启动数据库是对应用程序的其他业务系统有影响的。
     那么,开始讨论下一问题:在基于 web 的应用程序中,应用服务器使用固定的用户 id(如 APPUSER)连接到数据库。应用程序用户由应用程序验证。例如,用户 SCOTT 连接到应用程序,应用程序验证用户,然后使用用户 id APPUSER 连接到数据库。同样,另一个选择数据的应用程序用户 JANE 也将被记录为 APPUSER 而不是 JANE。由于记录的用户名不是实际的用户,审计没有发挥作用。
(注:以下内容大部分摘自现实问题的细粒度审计,第 2 部分  [url]http://www.oracle.com/technology/global/cn/pub/articles/nanda_fga_pt2.html[/url]
    
      在 web 应用程序中,连接池的概念还需要使用一个普通的用户 id。如下图所示,应用服务器使用用户 APPUSER 创建了几个与数据库的连接。当应用程序用户(如 SCOTT)需要涉及数据库的服务时,应用程序使用与数据库的一个连接来完成请求。这一模型可以使用几个连接支持许多用户,因此受到 web 应用程序设计师的欢迎。但需要重申的是,这一方法不会在记录正确的用户名。
     目前,已经找到一个似乎可行的方案:客户端标识符。任何值都可以放入该属性中,在我们的情况中,可以使用它来代表实际的用户名,如 JANE。尽管数据库用户名被记录为 APPUSER 或其它名字,客户端标识符可以存放值 JANE。可以将会话的客户端标识符设置为某个值,方法是调用 Oracle 提供的 API dbms_session.set_identifier
     在各种审计情况下(从常规类型到高级的细粒度类型),这个值都提供缺少的链接来表示实际的用户。在常规的审计跟踪中,表 AUD$ 在列 CLIENTID 中记录了客户端标识符(如果在会话中已设置)。该值显示在相关的视图中,如列 CLIENT_ID 中的 DBA_AUDIT_TRAIL。
    
    令人感到困难的是如何正确地设置这一值。请记住,在一个启用 web 且具有连接池的应用程序中,数据库会话服务于许多用户会话—在会话之初仅设置一次值没有作用。此外,应用程序必须在每次调用数据库之前设置客户端标识符,从而才能够看到真正的应用程序用户 id。当另一个应用程序线程重用数据库会话时,标识符被设置为另一个用户 id,标识跟踪中的该名用户。
(这段话不太明白。。。。我的课题中正是典型的使用了连接池的。。。该如何处理。。。?)