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