パフォーマンスとスケーラビリティの問題を発生させずにデータベース アクティビティを監査するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/67557

質問

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

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

役に立ちましたか?

解決

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

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

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

重要な点は、データベース自体に余分な負荷をかけないことです。

また、それは受動的な監視であり、すべてのアクティビティを記録しましたが、操作をブロックできなかったため、探しているものはまったくないかもしれません。

他のヒント

「自分でロールする」必要はありません。監査を有効にするだけです。

  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

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

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

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

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

よろしく、Opus

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

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

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

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

2) レコードに CHANGED_BY_USERID と CHANGED_DATE をまだ添付していない場合は、ターゲット側で Golden Gate 関数を使用して、現在のトランザクションのこの情報を取得できます。GG リファレンス ガイドで次の関数を確認してください。ggheader( "userid")ggheader( "Timestamp")

したがって、無料ではなく (Oracle によるライセンスが必要)、起動するにはある程度の労力が必要ですが、おそらく独自のカスタム ソリューションを実装して維持するよりも労力とコストがはるかに少なく、データを配布できるという追加の利点もあります。これにより、ソース データベースへの影響を最小限に抑えることができます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top