Databasgranskning
Din nästa uppgift är att skapa en ny trigger för att granska ändringar av databasobjekt.
Du behöver skapa triggern på databasnivå. Du kan använda grupphändelsen DDL_TABLE_VIEW_EVENTS för att utlösa triggern. Den här grupphändelsen omfattar alla databasoperationer som berör tabeller, vyer, index och statistik. Genom att använda grupphändelsen behöver du inte ange varje enskild händelse separat.
Triggern infogar information om den utlösande satsen (händelse, användare, fråga osv.) i tabellen DatabaseAudit.
Den här övningen är en del av kursen
Bygga och optimera triggers i SQL Server
Övningsinstruktioner
- Skapa en trigger med namnet
DatabaseAuditpå databasen som aktiveras vidDDL_TABLE_VIEW_EVENTS.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
-- 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;