SQL Server 2008 の特定のデータベースのすべてのテーブルで挿入/更新/削除された行を追跡/記録する最良の方法は何ですか?
または、SQL Server 2008 にはより優れた "監査" 機能がありますか?
SQL Server 2008 の特定のデータベースのすべてのテーブルで挿入/更新/削除された行を追跡/記録する最良の方法は何ですか?
または、SQL Server 2008 にはより優れた "監査" 機能がありますか?
簡単な答えは、すべてに適合する単一のソリューションは存在しないということです。システムと要件によって異なりますが、ここではいくつかの異なるアプローチを示します。
DML トリガー
1 つのテーブルで適切に機能するものを作成し、それを他のテーブルに適用する必要があるため、比較的簡単に実装できます。
欠点は、多くのテーブルとさらに多くのトリガーがあると、面倒になる可能性があることです。200 個のテーブルに対して 600 個のトリガー (テーブルごとに挿入、更新、および削除のトリガー) を管理するのは簡単な作業ではありません。また、パフォーマンスに影響を与える可能性があります。
SQL Server での監査トリガーの作成 トリガーを使用
してデータベース テーブルへの変更をログに記録する
変更データ キャプチャ
実装は非常に簡単で、ネイティブにサポートされていますが、エンタープライズ版のみであり、多額の費用がかかる可能性があります;)。もう 1 つの欠点は、CDC がまだ本来あるべきほど進化していないことです。たとえば、スキーマを変更すると、履歴データが失われます。
トランザクションログ分析
これの最大の利点は、データベースを完全復旧モードにするだけで、すべての情報がトランザクション ログに保存されることです。ネイティブにはサポートされていません。
SQL Server 2008 SQL Server トランザクション ログ エクスプローラー/アナライザーでログ ファイル (*.LDF) を読み取る
これを実装したい場合は、そこに存在するサードパーティのツールをいくつか試してみることをお勧めします. 私は ApexSQL のいくつかのツールを使用しましたが、 IderaとNetwrixの優れたツールもあります。
ApexSQL ログ– トランザクション ログを読み取ることによる監査
ApexSQL Comply – バックグラウンドでトレースを使用し、それらのトレースを解析して結果を中央データベースに保存します。
免責事項: 私は上記の企業とは一切関係ありません。
このためのツールが既にあるかどうかは覚えていませんが、いつでもトリガーを使用できます (そうすれば、行が変更されたテンポラル テーブル (INSERTED および DELETED) にアクセスできます)。残念ながら、すべてのテーブルを追跡したい場合は、かなりの作業になる可能性があります。もっと簡単な解決策があるはずだと思いますが、私が言ったことを覚えていません。
編集。
たぶんこれが役立つかもしれません: --Change tracking http://msdn.microsoft.com/en-us/library/cc280462.aspx
変更データ キャプチャは目的を達成するように設計されていますが、各テーブルを個別に設定する必要があるため、テーブルの数によっては、ロジスティクスが必要になる場合があります。また、デフォルトでは、データをキャプチャ テーブルに数日間しか保存しないため、データを取り出して長期間保存するには、SSIS パッケージが必要になる場合があります。
http://msdn.microsoft.com/en-us/library/cc280386.aspx
これにより、データベース レベルで監査を行うことができます。ビジネス要件を満たすのに十分な場合もあれば、そうでない場合もあります。通常、データベース レコードは、それらを結合するロジックがなければあまり意味をなさないからです。たとえば、ユーザー x が「projects」、「users」、「time_status」テーブルへの外部キーを使用して「time_booked」テーブルにレコードを挿入したことを知っていても、これら 4 つのテーブルを結合する SQL クエリがなければ意味がありません。一緒。
また、データベース ユーザーごとに独自のユーザー ID で接続する必要がある場合もあります。これは、統合セキュリティとクライアント アプリでは問題ありませんが、接続プールを使用する Web サイトでは機能しない可能性があります。
そのようにSQLサーバーのログを分析することはできません。ログを読み取るために利用できるサードパーティのツールがいくつかありますが、私が知る限り、統計などについてクエリを実行することはできません。この種の情報が必要な場合は、何らかの監査を作成して、これらすべてのイベントを個別のテーブルにキャプチャする必要があります。「DDLトリガー」を使用できます。