IniziaInizia gratis

Audit del database

Il tuo prossimo compito è sviluppare un nuovo trigger per registrare le modifiche agli oggetti del database.

Devi creare il trigger a livello di database. Puoi usare il gruppo di eventi DDL_TABLE_VIEW_EVENTS per attivare il trigger. Questo gruppo include qualsiasi operazione sul database che coinvolga tabelle, viste, indici o statistiche. Utilizzando il gruppo di eventi, non hai bisogno di specificare tutti gli eventi singolarmente.

Il trigger inserirà nella tabella DatabaseAudit i dettagli sull’istruzione che lo attiva (evento, utente, query, ecc.).

Questo esercizio fa parte del corso

Creare e ottimizzare i trigger in SQL Server

Visualizza il corso

Istruzioni dell'esercizio

  • Crea un trigger DatabaseAudit sul database che si attivi per DDL_TABLE_VIEW_EVENTS.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

-- 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;
Modifica ed esegui il codice