監査証跡の実装 - Spring AOP 対 Hibernate インターセプター対 DB トリガー

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

質問

これに関するディスカッション スレッドをいくつか見つけましたが、3 つのメカニズムすべてを 1 つのスレッドで比較するものはありませんでした。

そこで私の質問です...

DB の変更 (ビジネス オブジェクトへの挿入、更新、削除) を監査する必要があります。

これを行うには3つの方法が考えられます

1) DBトリガー

2) Hibernate インターセプター

3) 春の AOP

(この質問は Spring\Hibernate DBMS に固有のものです。これは java\c# または hibernate hibernate に依存しないと思いますが、答えが C++ または Java、または Hibernate の特定の実装に依存する場合は、明記してください)

これらの戦略のいずれかを選択する場合の長所と短所は何ですか?

実装の詳細を求めているわけではありません。これは設計に関する議論です。

これをコミュニティ Wiki の一部として作成できることを願っています

役に立ちましたか?

解決

だけでお話しいただけたらと思いトリガーおよび設定によりどちらのモがわからないenought abou tSpring AOP.

もよりますが、何よりも重要なことです。

DBトリガー

  • 急速に
  • 常にというものからネイティブのSQLスクリプト、外部アプリとなります。
  • 書き込みデータのDBのNH知らない。で欠になり、現在のセッション。(この予期しない結果)
  • 普段とを何も知らなくともセッション(例えば:ログイン名)となります。

設定によりどちらのモインタセプタ/イベント

  • なDBMS固有のものです。
  • できるアクセスの良いビジネス情報、ユーザーセッションでは、クライアントからサーバマシン名、計算や解釈が局在す。
  • できる宣言的構成のように、属性の実体を定義した場合、企業のニーズにログインするという。
  • きをoffにログインする重要なアップグレードの輸入は、特別行為をしないよユーザーです。
  • できる事業体の事業モデルです。さんのユーザーます。

他のヒント

これが質問に100%関係しているわけではないことは理解していますが、新しいオプションにより価値が高まります。

何が起こっているかを監査できる方法がさらに 2 つあります。

トランザクション ログの読み取り:データベースが完全回復モードの場合、INSERT、UPDATE、DELETE、および DDL ステートメントに関するすべての詳細がトランザクション ログに記録されます。

問題は、ネイティブにサポートされていないため読み取りが非常に複雑であり、次のようなサードパーティのトランザクション ログ リーダーが必要になることです。 ApexSQL ログ または SQLログレスキュー (後者は無料ですが、SQL 2000 のみをサポートします)。

この方法の利点は、データベースを完全回復モードにすること以外は文字通り変更を加える必要がないことです。

SQL Server トレース:トレースは、一部のコンプライアンス シナリオで必要になる可能性がある select ステートメントを含む、トレース ファイル内のすべてをキャプチャします。欠点は、トレースは解析して整理する必要があるテキスト ファイルであることです。

私は、データベースへの変更を監査するためにデータベース・トリガーを使用していないために何か良い理由を考えることはできません。挿入、更新および削除は、潜在的にさまざまなソースからデータベースを打つことができる - トリガは、これらすべてをキャッチします。などを休止しません。

私は、あなたが監査を考えるとき、あなたはそれが何のためにあるのかを検討する必要がありティンク。まず、それはあなたが悪いの変更をバックアウトすることができ、あなたはシステムの問題を特定することができます変更するものとどのような変更され、誰の記録をhaveaすることである(我々は1が壊れているすばやく特定するのに役立ちます変更をcasuedいくつかのdifferntアプリケーションのかを確認することができます)そしてあなたが変更した人を識別することができます。それは不正行為を検出することになると、最後は本当に重要になる場合があります。ユーザーインターフェイスからすべてを行う場合は、ユーザーが自分自身に小切手を書くために、バックエンドのデータを変更する詐欺を犯して見ることはありません。あなたがインターフェイスからすべてを行う場合は、おそらくあなたは、このようにして開始する詐欺のためにドアを開け、tabelレベルで設定された権限を持っている必要があります。あなたがインターフェイスからすべてを行う場合は、不満を持つ従業員は、純粋な迷惑値のために全体のユーザーテーブルを削除したかわからなくなります。あなたは、フロントエンドからすべてを行う場合は、誤って同じ顧客にすべての顧客の注文を更新無能どのDBA知ることができません。私はあなたが最初の場所で監査を必要とする理由の良い部分を失うとして、監査のトリガー以外のものを使用してサポートしていないことができます。

監査ログを実行するためのHibernateインターセプタを使用すると、大きな欠陥です。インターセプタは、監査を記録するために新しいトランザクションを使用しなければならない - 私は、その最も明らかな欠陥を指摘せずに、この方法をお勧めブログの数で唖然としています。これはあなたが成功したメイン・トランザクションを保存し、監査トランザクションを記録するために失敗し、システムのクラッシュを持っている可能性を意味します!

私はnow.There時にたまたま古い質問が利用できるもう一つのオプションであり、それは以降の3.6版から始まる休止と一緒に利用可能であるEnversです..

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