2012-03-05 8 views
2

この質問がStackOverflowに適しているかどうかは不明です。基本的には、ASP.NETやC#で作成されたデータベース駆動のビジネスアプリケーションがあります。このアプリケーションは、約20人の企業のメンバーによって使用されます。監査の重要な側面は監査です。テーブルの変更をログに記録し、スタッフの上級メンバーが閲覧できるようにする必要があります。C#/ SQLの変更ログ - ベストメソッド

私の現在のソリューションはSQLトリガを使用していますが、もっと堅牢で使いやすいものを作成する必要があります。データベースは巨大で、関係のあるテーブルがたくさんあります。監査は現在、ユーザーにとって非常に情報がありません。xユーザーがIDの顧客を837に変更するようスタッフに指示すると、役に立たないほど近くにあります。どのフィールドが監査ログに表示されるかを指示することができます。

私の考えでは、これらのすべてを処理するクラスを自分のコードに作成し、何らかの方法でユーザーに表示するフィールドをマップし、コードがどのテーブルに変更され、どのレコードに記録されるかを指示します。

誰でも、私が欲しいことをやり遂げる方法や、実際に可能かどうかについての一般的なアドバイスはありますか?私は自分のコードでLINQ-to-SQLを多用しているので、助けてくれることを願っています。

+0

監査はデータベース以外の場所には決して配置しないでください。アプリケーションから来たものだけでなく、すべての変更を監査したいとします。トリガーは正しい解決策です。トリガーに適切なデータがない場合は、それを変更してください。 – HLGEM

+0

一方、トリガーはメンテナンスの悪夢です。 – Amicable

答えて

1

お客様のニーズに応じてDoddleAuditを試してみることもできます。あなたはまた、SQLを使用して試みることができるhttp://doddleaudit.codeplex.com/

0

私はlinq-to-データアクセス用のSQL。

Linq-to-SQLで一元的に行う1つの方法は、データコンテキストクラスでSubmitChangesをオーバーライドすることです。変更を提出する前に、GetChangeSet()に連絡して、保留中の変更に関するデータを入手してください。 base.SubmitChanges()を呼び出す前に、関連するログテーブルに適切な変更トラッキング情報を追加します。私のアプリケーションでは、xmlカラムを使用して、システム内の各テーブルの特別な履歴テーブルを作成することなく、構造化された方法で異なるテーブルの変更データを格納できるようにしました。

0

を:あなたはここでそれを見つけることができます

What table was modified? 
What fields changed? 
Who made the change? 
When did it occur? 

:それには、単一のコード行を使用してデータベース内の任意のテーブルに対して削除/すべての挿入/更新の自動監査を提供しますServer 2008のChange Data Capture機能。基本的には、目的の表の挿入、更新、削除をキャプチャーし、変更を別のリレーショナル表のセットに保管します。

http://www.mssqltips.com/sqlservertip/1474/using-change-data-capture-cdc-in-sql-server-2008/