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
Instrukcje do ćwiczenia
- Utwórz trigger
DatabaseAuditna 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;