LoslegenKostenlos starten

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

<Kurs>Trigger in SQL Server erstellen und optimieren</Kurs>
Kurs ansehen

Übungsanweisungen

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

Interaktive praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

-- 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