LoslegenKostenlos loslegen

Datenbank-Auditing

Deine nächste Aufgabe ist es, einen neuen Trigger zu entwickeln, um Änderungen an Datenbankobjekten zu protokollieren.

Du musst den Trigger auf Datenbankebene erstellen. Du kannst das Gruppenereignis DDL_TABLE_VIEW_EVENTS verwenden, um den Trigger auszulösen. Dieses Gruppenereignis umfasst alle Datenbankoperationen mit Tabellen, Sichten, Indizes oder Statistiken. Durch die Verwendung des Gruppenereignisses musst du nicht alle Ereignisse einzeln angeben.

Der Trigger schreibt Details zur auslösenden Anweisung (Ereignis, Benutzer, Abfrage usw.) in die Tabelle DatabaseAudit.

Diese Übung ist Teil des Kurses

Trigger in SQL Server erstellen und optimieren

Kurs anzeigen

Anleitung zur Übung

  • Erstelle einen DatabaseAudit-Trigger auf der Datenbank, der bei DDL_TABLE_VIEW_EVENTS ausgelöst wird.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

-- 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 bearbeiten und ausführen