監査テーブルは、特定のテーブルに対するトランザクションを追跡するために使用されます。彼らはあなたが進行中の「ログ」を見ることができるようにします(より良いWordがないため)。たとえば、次のようなテーブルがあるとします。
create table SensitiveInformation
(
SensitiveNumber int not null,
SensitiveData varchar(100) not null
)
go
そのテーブルの挿入、更新、削除を行うアクセス権を持つユーザーやアプリケーションが存在する可能性があります。しかし、そのデータは機密性が高いため、そのテーブルで誰が何をしているのかをすばやく簡単に追跡したい場合があります。
そのため、そのテーブルで行われていることを追跡するための監査テーブルがあります。通常、これには基本的なWho、What、Whenが含まれます。
監査テーブルは次のようになります。
create table SensitiveInformationAudit
(
SensitiveNumberNew int null,
SensitiveNumberOld int null,
SensitiveDataNew varchar(100) null,
SensitiveDataOld varchar(100) null,
Action varchar(50) not null,
AuditDate datetime not null,
LastUpdatedUser varchar(100) not null
)
go
監査テーブルは、通常、データベーストリガーを使用して入力されます。つまり、X
アクションがSensitiveInformation
で発生したときに、その詳細をSensitiveInformationAudit
に挿入します。
これまで強調されていなかった監査テーブルのもう1つの重要な側面は、誰がどのレコードに対して何をしたかを追跡することに加えて(多くの場合、スナップショットの前後を含む)監査テーブルは一度だけ書き込みます =。
監査テーブルのレコードは更新または削除できません(注を参照)。挿入のみ可能です。これは、トリガーまたはアプリケーションロジックを使用して課せられることもありますが、検出が困難な方法で何も改ざんされていないことを「証明」するため、実際には重要です。
注:監査テーブルから古いレコードを削除するには、管理者または監査人による承認が必要になることが多い特別なプロセスが必要です。
監査テーブルは通常、機密テーブルや機密テーブルの変更を追跡する場合に使用されます。給与率とボーナス率に使用されるテーブルがあり、HRアプリケーションがこのデータに基づいて給与を報酬する場合、このテーブルへの書き込みアクセス権を持つユーザーは、不正な支払いの変更を行うことができます。
同時に、一部のユーザーはこれらのテーブルでの作業を許可されている必要があります。これが監査テーブルの出番です。監査テーブルを使用して、変更されたデータの前後の値を追跡できます。通常、変更を行った人や変更が行われた時間などの追加情報も保存されます。
したがって、これらの監査テーブルは、権限のあるユーザーが不正なアクティビティを実行することを阻止します。また、正しい値に戻す手段も提供します。
SQL 2008以降には、これに使用できる Change Data Capture と呼ばれる組み込み機能があります。
監査テーブルは、データベースで発生したデータの変更をキャプチャするネイティブまたはサードパーティの監査ツールで使用されます。通常、変更を行ったユーザーに関する情報、変更によって影響を受けたオブジェクト、変更が加えられたときの情報、および変更に使用したSQLログイン、アプリケーション、およびホスト。キャプチャされたすべての情報は監査テーブルに保存され、エクスポートまたはクエリを介してユーザーフレンドリーな形式で利用できる必要があります。