Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Maak een DatabaseAudit-trigger op de database die afgaat voor DDL_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;
Code bewerken en uitvoeren