6

アプリケーションからのものであるか、他の手段でSQLを発行した人であるかに関係なく、すべてのデータベースアクティビティを監査する必要があります。したがって、監査はデータベース レベルで行う必要があります。問題のデータベースは Oracle です。私は、トリガーを介してそれを行うことを検討しました。また、オラクルが提供するファイングレイン監査と呼ばれるものを介して行うことも検討しました。どちらの場合も、特定のテーブルと特定の列の監査を有効にしました。ただし、これらの方法のいずれかを使用すると、パフォーマンスが本当に悪いことがわかりました.

データのプライバシーに関する規制により、監査は絶対に必要であるため、パフォーマンスを大幅に低下させずにこれを行うにはどうすればよいかを考えています。誰かがこれに関してOracle固有の経験を持っている場合、それは役に立ちますが、データベースアクティビティの監査に関する一般的な慣行だけでなくても問題ありません。

4

4 に答える 4

2

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

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

私はPostgreSQLを使用しましたが、トラフィックをデコードして、ログに記録できるデータベース操作のストリームに変換するのは比較的簡単でした。ただし、パケット形式が文書化されているすべてのデータベースで機能すると思います。

重要な点は、データベース自体に余分な負荷がかからないことでした。

また、パッシブモニタリングであり、すべてのアクティビティを記録しましたが、操作をブロックできなかったため、探しているものとは異なる場合があります。

于 2008-09-15T22:28:57.697 に答える
1

「自分で巻く」必要はありません。監査をオンにするだけです。

  1. データベース パラメータ AUDIT_TRAIL = DB を設定します。
  2. インスタンスを開始します。
  3. SQLPlus でログインします。
  4. ステートメントを入力してください
    すべてを監査します。
    これにより、多くの重要な DDL 操作の監査が有効になりますが、DML およびその他の一部の DDL ステートメントはまだ監査されません。
  5. これらの他のアクティビティの監査を有効にするには、次のようなステートメントを試してください。
    テーブルの変更を監査します。-- DDL 監査
    テーブルの選択、テーブルの更新、テーブルの挿入、テーブルの削除を監査します。-- DML 監査

注: すべての「as sysdba」アクティビティは、常に O/S に対して監査されます。Windows では、これは Windows イベント ログを意味します。UNIX では、これは通常 $ORACLE_HOME/rdbms/audit です。

データベース SQL リファレンスのOracle 10g R2 監査の章を確認してください。

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

オラクルの内部監査は、当然のことながら高性能であることを指摘しておく必要があります。まさにそのように設計されており、パフォーマンスでこれに匹敵するものを他に想像することは非常に困難です. また、Oracle 監査の高度な「きめ細かい」制御があります。必要なだけ正確に取得できます。最後に、SYS.AUD$ テーブルとそのインデックスを別のテーブルスペースに移動して、SYSTEM テーブルスペースがいっぱいになるのを防ぐことができます。

よろしく、オーパス

于 2010-04-10T06:46:44.610 に答える
1

変更されたレコードのコピーをターゲット システムに記録したい場合は、Golden Gate Software を使用してこれを行うことができ、ソース側のリソースの浪費をあまり気にする必要はありません。また、このソリューションを実装するためにソース データベースを変更する必要はありません。

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

証跡ファイルをターゲット システムに取得したら、監査を実行するオプションを設定できるいくつかの構成調整があり、必要に応じて 2 つのゴールデン ゲート関数を呼び出してトランザクションに関する情報を取得できます。

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

2) レコードに CHANGED_BY_USERID と CHANGED_DATE が関連付けられていない場合は、ターゲット側でゴールデン ゲート関数を使用して、現在のトランザクションのこの情報を取得できます。GG リファレンス ガイドで次の関数を確認してください: GGHEADER("USERID") GGHEADER("TIMESTAMP")

したがって、無料ではありません (オラクルによるライセンスが必要です)。スピンアップするにはいくらかの努力が必要ですが、独自のカスタム ソリューションを実装して維持するよりもおそらくはるかに少ない労力/コストであり、データを出荷するという追加の利点があります。ソース データベースへの影響を最小限に抑えることが保証されます。

于 2010-04-12T15:28:08.883 に答える
0

オラクルを使用している場合は、CDC(Capture data change)と呼ばれる機能があり、監査の種類の要件に対してよりパフォーマンス効率の高いソリューションです。

于 2011-03-29T05:48:07.563 に答える