НачатьНачать бесплатно

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

Ваша следующая задача — разработать новый триггер для аудита изменений объектов базы данных.

Триггер необходимо создать на уровне базы данных. Для его срабатывания можно использовать групповое событие 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;
Редактировать и запускать код