0

Oracle-Java アプリケーションの監査追跡システムを構築しようとしています。私はGoogleでたくさんの検索をしました。主にトリガーを使用することをお勧めします。しかし、このアプローチの問題点は、どのアプリケーション ユーザーが変更を行っているかを追跡できないことです。変更とともにユーザー ID も追跡したいと考えています。最善のアプローチは何ですか?

4

1 に答える 1

0

データベースに情報を監査させたい場合は、特定のセッションにどのアプリケーション ユーザーがログインしているかをデータベースに知らせる必要があります。これにはさまざまな方法がありますが、その多くはアプリケーション アーキテクチャに依存します。これが標準の 3 層アプリケーションであると仮定すると、1 つのアプローチはコンテキストを作成することです。

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_pkg.set_user、新しいアプリケーション ユーザーが特定のセッションを使用するたびに、プロシージャを呼び出す必要があります。これが接続プールを持つ 3 層アプリケーションの場合、ユーザーがプールからの接続を要求するたびに、これが発生する必要があります。

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

PL/SQL procedure successfully completed.

トリガー・コード(またはPL/SQLの他の場所)で、コンテキストを問い合せて、現在のアプリケーション・ユーザーのIDを判別できます。

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

SYS_CONTEXT('LOGIN_CTX','USER_NAME')
--------------------------------------------------------------------------------
Justin

監査したい他の要素がある場合は、コンテキストに必要な任意の属性を設定できます (つまり、クライアント IP アドレスやセッション ID など、中間層がアクセスできるものを渡すことができます)。

その他のオプションには、アプリケーション ユーザーのデータベースでプロキシ ユーザーを使用する、コンテキストを使用する代わりにパッケージ変数を設定する、アプリケーションに監査を実行させるなどがあります。

于 2012-07-26T15:33:56.700 に答える