Zacznij terazZacznij za darmo

Audyt bazy danych

Twoim kolejnym zadaniem jest stworzenie nowego triggera do audytu zmian obiektów bazy danych.

Trigger należy utworzyć na poziomie bazy danych. Możesz użyć grupowego zdarzenia DDL_TABLE_VIEW_EVENTS, aby go wyzwalać. To zdarzenie grupowe obejmuje wszelkie operacje bazodanowe dotyczące tabel, widoków, indeksów i statystyk. Dzięki użyciu zdarzenia grupowego nie musisz podawać poszczególnych zdarzeń osobno.

Trigger będzie wstawiał szczegóły dotyczące wyzwalającej instrukcji (zdarzenie, użytkownik, zapytanie itp.) do tabeli DatabaseAudit.

To ćwiczenie jest częścią kursu

Tworzenie i optymalizacja triggerów w SQL Server

Zobacz kurs

Instrukcje do ćwiczenia

  • Utwórz trigger DatabaseAudit na bazie danych, który będzie uruchamiany dla zdarzeń DDL_TABLE_VIEW_EVENTS.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

-- 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;
Edytuj i uruchom kod