Database-auditing
Je volgende taak is om een nieuwe trigger te bouwen om wijzigingen aan databaseobjecten te auditen.
Je moet de trigger op databaseniveau aanmaken. Je kunt de groepsevenementen DDL_TABLE_VIEW_EVENTS gebruiken om de trigger te laten afgaan. Deze groep bevat elke databasebewerking met tabellen, views, indexen of statistieken. Door de groep te gebruiken, hoef je niet alle gebeurtenissen afzonderlijk op te geven.
De trigger voegt details over de uitvoerende instructie (event, gebruiker, query, enz.) toe aan de tabel DatabaseAudit.
Deze oefening maakt deel uit van de cursus
Triggers in SQL Server bouwen en optimaliseren
Oefeninstructies
- Maak een
DatabaseAudit-trigger op de database die afgaat voorDDL_TABLE_VIEW_EVENTS.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
-- 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;