Oracle11g Oracle中的审计跟踪系统

Oracle11g Oracle中的审计跟踪系统,oracle11g,audit-trail,Oracle11g,Audit Trail,我正在尝试为我的Oracle Java应用程序构建一个审计跟踪系统。我在谷歌上做了很多搜索。找到了一些解决方案,大多建议使用触发器。但使用这种方法的问题是,我无法跟踪哪个应用程序用户正在进行更改。我还想跟踪用户ID以及更改。你们能告诉我什么是最好的方法吗?如果你想让数据库审核信息,你需要做一些事情让数据库知道哪个应用程序用户登录到特定会话。有多种方法可以实现这一点,其中许多方法取决于应用程序体系结构。假设这是一个标准的三层应用程序,一种方法是创建上下文 SQL> create contex

我正在尝试为我的Oracle Java应用程序构建一个审计跟踪系统。我在谷歌上做了很多搜索。找到了一些解决方案,大多建议使用触发器。但使用这种方法的问题是,我无法跟踪哪个应用程序用户正在进行更改。我还想跟踪用户ID以及更改。你们能告诉我什么是最好的方法吗?

如果你想让数据库审核信息,你需要做一些事情让数据库知道哪个应用程序用户登录到特定会话。有多种方法可以实现这一点,其中许多方法取决于应用程序体系结构。假设这是一个标准的三层应用程序,一种方法是创建上下文

SQL> create context login_ctx using login_pkg;

Context created.

SQL> create or replace package login_pkg
  2  as
  3    procedure set_user( p_username in varchar2 );
  4  end;
  5  /

Package created.

SQL> ed
Wrote file afiedt.buf

  1  create or replace package body login_pkg
  2  as
  3    procedure set_user( p_username in varchar2 )
  4    as
  5    begin
  6      dbms_session.set_context( 'LOGIN_CTX', 'USER_NAME', p_username );
  7    end;
  8* end;
SQL> /

Package body created.
然后,每当新的应用程序用户要使用特定会话时,您的应用程序都需要调用
login\u pkg.set\u user
过程。如果这是一个具有连接池的三层应用程序,则每次用户从连接池请求连接时都需要这样做

SQL> exec login_pkg.set_user( 'Justin' );

PL/SQL procedure successfully completed.
然后,在触发器代码(或PL/SQL中的其他地方)中,可以查询上下文以确定当前应用程序用户的身份

SQL> select sys_context( 'LOGIN_CTX', 'USER_NAME' )
  2    from dual;

SYS_CONTEXT('LOGIN_CTX','USER_NAME')
--------------------------------------------------------------------------------
Justin
如果要审核其他元素,则可以在上下文中设置任意属性(即,可以传入客户端IP地址、会话ID或中间层可以访问的任何其他内容)

其他选项包括在数据库中为应用程序用户使用代理用户、设置包变量而不是使用上下文,或者让应用程序执行审核