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