ПочатиПочніть безкоштовно

Аудит бази даних

Ваше наступне завдання — розробити новий тригер для аудиту змін об'єктів бази даних.

Потрібно створити тригер на рівні бази даних. Ви можете використати групову подію 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;
Редагувати та запускати код