Аудит бази даних
Ваше наступне завдання — розробити новий тригер для аудиту змін об'єктів бази даних.
Потрібно створити тригер на рівні бази даних. Ви можете використати групову подію 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;