データガバナンスは、企業がデータの正確性、一貫性、セキュリティを維持するために不可欠な要素です。特に、SQL Serverを活用する企業では、データの不正アクセスや不適切な変更を防ぐために、適切な監査ログの導入と分析が求められます。
本記事では、SQL Serverのデータ監査機能を活用し、アクセス制御やデータ変更を監視・対応する方法について解説します。
SQL Serverのデータガバナンスとは?
SQL Serverのデータガバナンスは、データの品質、セキュリティ、コンプライアンスを維持するためのフレームワークです。これには以下の要素が含まれます。
- データセキュリティ: ユーザーのアクセス権を制御し、適切な権限でデータを管理する。
- データ整合性: 一貫したデータを維持し、変更履歴を適切に記録する。
- コンプライアンス: 規制要件(GDPR、SOX法など)に準拠するための監査機能を導入する。
SQL Serverでは、監査機能(SQL Server Audit) を活用することで、データベースの変更やアクセス状況を詳細に記録し、データガバナンスを強化できます。
SQL Serverのデータ監査とは?
データの監査とは、システムのアクセス履歴や変更履歴を記録し、不正アクセスやセキュリティインシデントを検出できるようにするプロセスです。監査の主な目的は以下のとおりです。
- 不正アクセスの検知(データへの不正な変更やアクセスがあったかを特定)
- コンプライアンス対応(法規制に準拠したデータ管理の証明)
- インシデント対応の迅速化(問題発生時の原因追跡と修正)
監査ログは定期的に確認し、不要なデータは適切にアーカイブ・削除することが重要です。
監査ログの導入と設定
ここでは、SQL Serverの監査機能を実際に設定し、ログを収集する方法を解説します。
監査ログの有効化
まず、監査ログを有効にし、出力先を指定します。
-- 監査の作成
CREATE SERVER AUDIT ServerAudit
TO FILE (FILEPATH = 'C:\AuditLogs\ServerAudit.sqlaudit');
-- 監査の有効化
ALTER SERVER AUDIT ServerAudit WITH (STATE = ON);
サーバーレベルの監査設定
サーバーレベルのイベント(ログイン試行など)を監視するには、Server Audit Specification を設定します。
-- サーバーレベルの監査仕様を作成
CREATE SERVER AUDIT SPECIFICATION ServerAuditSpec
FOR SERVER AUDIT ServerAudit
ADD (FAILED_LOGIN_GROUP),
ADD (SUCCESSFUL_LOGIN_GROUP)
WITH (STATE = ON);
データベースレベルの監査設定
データベース内の特定テーブルへのアクセスやデータ変更を監視するには、Database Audit Specification を設定します。
USE MyDatabase;
GO
-- データベースレベルの監査仕様を作成
CREATE DATABASE AUDIT SPECIFICATION DatabaseAuditSpec
FOR SERVER AUDIT ServerAudit
ADD (SELECT, INSERT, UPDATE, DELETE
ON dbo.Employees BY public)
WITH (STATE = ON);
監査ログの分析
監査ログの内容を確認し、異常なアクセスや不正なデータ変更を検出する方法を解説します。
監査ログの取得
監査ログの内容は、システムビュー sys.fn_get_audit_file を使用して確認できます。
SELECT event_time, succeeded, session_id, server_principal_name, database_name, object_name, statement
FROM sys.fn_get_audit_file ('C:\AuditLogs\ServerAudit.sqlaudit', DEFAULT, DEFAULT);
監査データの分析
異常なアクティビティを特定するには、以下のようなクエリを実行します。
不正なログイン試行の分析
SELECT event_time, server_principal_name, statement, succeeded
FROM sys.fn_get_audit_file ('C:\AuditLogs\ServerAudit.sqlaudit', DEFAULT, DEFAULT)
WHERE succeeded = 0;
特定のテーブルに対する変更履歴の確認
SELECT event_time, server_principal_name, statement
FROM sys.fn_get_audit_file ('C:\AuditLogs\ServerAudit.sqlaudit', DEFAULT, DEFAULT)
WHERE object_name = 'Employees' AND statement LIKE 'UPDATE%';
監査結果の対応策
監査ログの分析結果をもとに、不正アクセスやデータ改ざんに対応する方法を解説します。
アクセス制御の強化
- DENY を使用して特定ユーザーの権限を制限
- ログイン失敗が一定回数を超えたらアカウントをロック
ALTER LOGIN user1 DISABLE;
不正なデータ変更の検出と対応
- 変更履歴を基に不正な更新をロールバック
- データの改ざんが疑われる場合、バックアップから復元
RESTORE DATABASE MyDatabase FROM DISK = 'C:\Backup\MyDatabase.bak';
演習問題
問題1: SQL Server Auditの設定
以下の要件に従ってSQL Serverの監査設定を行いなさい。
- SalesDB データベースに対して Orders テーブルの INSERT 操作を監視する監査ログを設定せよ。
- 監査ログの出力先を C:\AuditLogs\SalesAudit.sqlaudit に設定せよ。
解答例
CREATE SERVER AUDIT SalesAudit
TO FILE (FILEPATH = 'C:\AuditLogs\SalesAudit.sqlaudit');
ALTER SERVER AUDIT SalesAudit WITH (STATE = ON);
USE SalesDB;
GO
CREATE DATABASE AUDIT SPECIFICATION SalesAuditSpec
FOR SERVER AUDIT SalesAudit
ADD (INSERT ON dbo.Orders BY public)
WITH (STATE = ON);
まとめ
SQL Serverの監査機能を活用することで、アクセス制御やデータ変更を詳細に記録し、分析することができます。
適切な監査ログの設定と定期的な分析により、不正アクセスの早期検出やデータ改ざんの防止が可能になります。