시작하기무료로 시작하기

데이터베이스 감사(Auditing)

다음 작업은 데이터베이스 개체 변경을 감사하기 위한 새 트리거를 개발하는 것입니다.

트리거는 데이터베이스 수준에서 만들어야 해요. 트리거를 실행하기 위해 DDL_TABLE_VIEW_EVENTS 그룹 이벤트를 사용할 수 있어요. 이 그룹 이벤트에는 테이블, 뷰, 인덱스, 통계와 관련된 모든 데이터베이스 작업이 포함됩니다. 그룹 이벤트를 사용하면 모든 이벤트를 개별적으로 지정할 필요가 없어요.

트리거는 실행된 문장(이벤트, 사용자, 쿼리 등)에 대한 세부 정보를 DatabaseAudit 테이블에 삽입해야 합니다.

이 연습은 강의의 일부입니다

SQL Server에서 트리거 구축 및 최적화

강의 보기

연습 안내

  • 데이터베이스에 DDL_TABLE_VIEW_EVENTS에 대해 작동하는 DatabaseAudit 트리거를 만드세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

-- 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;
코드 편집 및 실행