始める無料で始める

データベース監査

次のタスクは、データベースオブジェクトの変更を監査する新しいトリガーを作成することです。

トリガーはデータベースレベルで作成します。トリガーを起動するには、DDL_TABLE_VIEW_EVENTS のグループイベントを使用できます。このグループイベントには、テーブル、ビュー、インデックス、統計に関わるあらゆるデータベース操作が含まれます。グループイベントを使うことで、すべてのイベントを個別に指定する必要がなくなります。

このトリガーは、起動元のステートメント(イベント、ユーザー、クエリなど)の詳細を DatabaseAudit テーブルに挿入します。

この演習はコースの一部です

SQL Server のトリガー構築と最適化

コースを見る

演習の手順

  • データベースに DatabaseAudit トリガーを作成し、DDL_TABLE_VIEW_EVENTS で起動するようにします。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

-- Create a new trigger
CREATE TRIGGER ___
-- Attach the trigger at the database level
ON ___
-- Fire the trigger for all tables/ views events
FOR ___
AS
	INSERT INTO DatabaseAudit (EventType, DatabaseName, SchemaName, Object, ObjectType, UserAccount, Query, EventTime)
	SELECT EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(50)') AS EventType
		  ,EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]', 'NVARCHAR(50)') AS DatabaseName
		  ,EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]', 'NVARCHAR(50)') AS SchemaName
		  ,EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(100)') AS Object
		  ,EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]', 'NVARCHAR(50)') AS ObjectType
		  ,EVENTDATA().value('(/EVENT_INSTANCE/LoginName)[1]', 'NVARCHAR(100)') AS UserAccount
		  ,EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'NVARCHAR(MAX)') AS Query
		  ,EVENTDATA().value('(/EVENT_INSTANCE/PostTime)[1]', 'DATETIME') AS EventTime;
コードを編集して実行