SQL Server Audit vs サードパーティ製ツール:監査ソリューションの選び方
SQL Serverで監査テーブルを実装するための提案
この文書では、SQL Serverで監査テーブルを実装するためのいくつかの提案を紹介します。
監査の種類
監査には、次の2種類があります。
- データ監査: データベース内のデータに対する変更を追跡します。
監査テーブルには、以下の情報を含める必要があります。
- 変更されたテーブル名
- 変更された列名
- 変更前の値
- 変更を行ったユーザー
- 変更日時
監査テーブルの実装方法
監査テーブルを実装するには、いくつかの方法があります。
- トリガーを使用する: データベースに対する変更が発生するたびにトリガーが実行され、監査テーブルにエントリが記録されます。
- Change Data Capture (CDC) を使用する: CDC は、データベースに対する変更を追跡するための専用の機能です。
- 拡張ストアド プロシージャを使用する: 拡張ストアド プロシージャを使用して、監査テーブルへのエントリの記録をカスタマイズできます。
監査テーブルの管理
監査テーブルは、定期的に管理する必要があります。
- 不要なエントリを削除する必要があります。
- 監査テーブルのサイズが大きくなりすぎないようにする必要があります。
- 監査テーブルのデータが安全であることを確認する必要があります。
監査テーブルは、さまざまな目的に使用できます。
- セキュリティ: データベースに対する不正なアクセスを検出するのに役立ちます。
- コンプライアンス: 規制や法令を遵守していることを証明するのに役立ちます。
- トラブルシューティング: データベースの問題の原因を特定するのに役立ちます。
監査テーブルを実装する前に、以下の点を考慮する必要があります。
- 監査によって発生するパフォーマンスへの影響
- 監査データのセキュリティ
- 監査データのストレージ要件
トリガーを使用した監査テーブルの実装
CREATE TRIGGER Audit_Employee
ON dbo.Employee
AFTER UPDATE, INSERT, DELETE
AS
BEGIN
INSERT INTO AuditTable (
TableName,
ColumnName,
OldValue,
NewValue,
ModifiedBy,
ModifiedDate
)
SELECT
t.name,
c.name,
d.value,
i.value,
suser_sname(),
GETDATE()
FROM
inserted i
INNER JOIN deleted d
ON i.EmployeeID = d.EmployeeID
INNER JOIN sys.columns c
ON i.EmployeeID = c.object_id
AND d.EmployeeID = c.object_id
INNER JOIN sys.tables t
ON c.object_id = t.object_id
END
USE AdventureWorks2019
GO
EXEC sp_cdc_enable_db
GO
EXEC sp_cdc_start_capture @source_schema = 'dbo', @source_name = 'Employee'
GO
SELECT * FROM cdc.fn_cdc_get_all_changes(@source_schema = 'dbo', @source_name = 'Employee')
GO
このコードは、AdventureWorks2019
データベースの dbo.Employee
テーブルに対する変更をキャプチャするために CDC を有効にします。
拡張ストアド プロシージャを使用した監査テーブルの実装
CREATE PROCEDURE Audit_Employee
AS
BEGIN
INSERT INTO AuditTable (
TableName,
ColumnName,
OldValue,
NewValue,
ModifiedBy,
ModifiedDate
)
SELECT
t.name,
c.name,
d.value,
i.value,
suser_sname(),
GETDATE()
FROM
inserted i
INNER JOIN deleted d
ON i.EmployeeID = d.EmployeeID
INNER JOIN sys.columns c
ON i.EmployeeID = c.object_id
AND d.EmployeeID = c.object_id
INNER JOIN sys.tables t
ON c.object_id = t.object_id
END
- Microsoft SQL Server Audit を使用する: SQL Server Audit は、データベースに対する変更を追跡するための専用の機能です。
- サードパーティ製の監査ツールを使用する: さまざまなサードパーティ製の監査ツールが利用可能です。
Microsoft SQL Server Audit
Microsoft SQL Server Audit は、データベースに対する変更を追跡するための専用の機能です。監査ログに記録される情報は、以下のとおりです。
- ログインとログアウト
- データベースに対する操作 (SELECT、UPDATE、INSERT、DELETE など)
- オブジェクトに対する操作 (CREATE、ALTER、DROP など)
- 権限の変更
SQL Server Audit は、以下の方法で構成できます。
- サーバーレベル: サーバーレベルで構成すると、すべてのデータベースに対する変更が監査されます。
- オブジェクトレベル: オブジェクトレベルで構成すると、特定のオブジェクトに対する変更のみが監査されます。
サードパーティ製の監査ツール
さまざまなサードパーティ製の監査ツールが利用可能です。これらのツールは、多くの場合、以下の機能を提供します。
- リアルタイムの監査
- 詳細なレポート
- アラート
- コンプライアンスレポート
サードパーティ製の監査ツールの選択は、組織のニーズと予算によって異なります。
sql sql-server database