2008-09-15 2 views
5

私は、アプリケーションから来たものであろうと、他の方法でSQLを発行した人であろうと、すべてのデータベース活動を監査する必要があります。したがって、監査はデータベース・レベルで実行する必要があります。問題のデータベースはOracleです。私はTriggersを介して、またOracleが提供するFine Grained Auditingというものを介してそれを行うことを検討しました。いずれの場合も、特定の表と特定の列の監査をオンにしました。しかし、私たちは、これらの方法のいずれかを使用すると、パフォーマンスが本当に厄介であることが分かりました。パフォーマンスとスケーラビリティの問題なしにデータベースアクティビティを監査する方法

データのプライバシーに関する規制のために監査が絶対必要であるため、パフォーマンスを大幅に低下させることなくこれを行うにはどうすればよいでしょうか。誰かがこれにオラクル固有の経験を持っているなら、役立つでしょうが、データベース活動監査に関する一般的な慣行ではないでしょう。

答えて

1

システムでは成熟したアプローチではないかどうかはわかりませんが、ネットワークトラフィックスニッファを使用してデータベース のトラフィックを監視することでかなり成功しました。

アプリケーションとデータベースの間の生データを別の マシンに送り、デコードして分析します。

私はPostgreSQLを使用し、トラフィックをデコードし、 に変換すると、データベース操作のストリームが比較的に となりました。私はパケット のフォーマットが文書化されているどんなデータベースでもうまくいくと思います。

主なポイントは、データベース自体に余分な負荷がかかりませんでした。

また、それは受動的な監視であり、すべての活動を記録しましたが、 は何の操作もブロックできないため、あなたが探しているものではない可能性があります。

1

「自分でロールする」必要はありません。

  1. データベースパラメータAUDIT_TRAIL = DBを設定します。
  2. インスタンスを起動します。
  3. SQLPlusでログインしてください。
  4. ステートメント
    audit all;
    を入力すると、多くの重要なDDL操作の監査がオンになりますが、DMLおよびその他のDDLステートメントは監査されません。
  5. は、これらの他の活動の監査を有効にするには、このような発言をしてみてください:
    audit alter table; -- DDL audit 
    audit select table, update table, insert table, delete table; -- DML audit

注:すべての「SYSDBAとして」活動は常にO/Sに監査されます。 Windowsでは、これはWindowsイベントログを意味します。 UNIXでは、通常$ ORACLE_HOME/rdbms/auditです。

「データベースSQLリファレンス」のOracle 10g R2 Audit Chapterを参照してください。

データベース監査証跡は、SYS.DBA_AUDIT_TRAILビューで表示できます。

内部Oracle監査は、定義によって高性能であることを指摘しておきます。それはまさにそのように設計されており、パフォーマンスのためにそれに匹敵するものを想像するのは非常に難しいです。また、Oracle監査の高度な「細かい」制御もあります。あなたはあなたが望むだけ正確にそれを得ることができます。最後に、SYS。AUD $表とその索引を別の表領域に移動して、SYSTEM表領域がいっぱいにならないようにすることができます。

敬具、 オーパス

1

あなたは、ターゲットシステム上で変更されたレコードのコピーを記録したい場合は、ゴールデンゲートソフトウェアでこれを行うと、ソース側のリソースドレインの方法で多くを負担することはできません。また、このソリューションを実装するためにソースデータベースを変更する必要はありません。

ゴールデンゲートは、関心のあるテーブルのリストを参照するトランザクションのREDOログをスクラブします。これらの変更は「トレイルファイル」に書き込まれ、同じデータベースの別のスキーマに適用されるか、 (ソースシステムの負荷を軽減するのに理想的です)。

あなたがターゲットシステムにトレイルファイルを入手したら、いくつかの設定の微調整は、あなたが監査を実行するためのオプションを設定することができ、必要な場合は、トランザクションに関する情報を取得するために2つのゴールデンゲート機能を呼び出すことができますがあります。

1) INSERTALLRECORDSレプリケーション・パラメータを設定して、ソース表に対する変更操作ごとにターゲット表に新しいレコードを挿入します。これは大量のスペースを消費する可能性があることに注意してください。包括的な監査が必要な場合は、おそらくこれが予想されます。

2)CHANGED_BY_USERIDとCHANGED_DATEがレコードに添付されていない場合は、ターゲット側のゴールデンゲート機能を使用して、現在のトランザクションの情報を取得できます。 GGリファレンスガイドに以下の機能をチェックアウト: GGHEADER(「USERID」) GGHEADER(「TIMESTAMP」)

(オラクルによるライセンスが必要)ので、ノーそのない自由を、そしてスピンアップするためにいくつかの努力が必要になります、独自のソリューションを実装して維持するよりも労力とコストが大幅に削減され、リモートシステムにデータを出荷するという利点があり、ソースデータベースへの影響を最小限に抑えることができます。

0

oracleを使用している場合、監査の種類の要件に対してパフォーマンスが向上したソリューションであるCDC(キャプチャ・データ変更)という機能があります。