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
Anleitung zur Übung
- Erstelle einen
DatabaseAudit-Trigger auf der Datenbank, der beiDDL_TABLE_VIEW_EVENTSausgelö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;