Tra le diverse tipologie di trigger esiste la tipologia che cattura eventi generati nell'intero server SQL.
Questa versione viene identificata con le keywords ON ALL SERVER.
Per esempio risulta molto utile per identificare la creazione o la cancellazione di Databases.
Ecco un esempio in cui gli eventi di creazione e cancellazione di database sono inseriti in una tabella per un eventuale gestione di questi eventi:
[code]
CREATE TRIGGER AuditDatabase_DROP_CREATE
ON ALL SERVER
FOR CREATE_DATABASE, DROP_DATABASE
AS
BEGIN
DECLARE @ed XML
DECLARE @ip VARCHAR(32)
SELECT @ip =client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID
SET @ed = EVENTDATA()
insert into AUDIT_SERVER.dbo.EventDropCreate (timewritten,LoginName,serverName,Evento,Message)
VALUES
(
GetDate(),
@ed.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(MAX)'),
@@SERVERNAME,
@ed.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(MAX)'),
@ed.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(MAX)')
)
END
[/code]
Successivamente se si vuole verificare lo stato del trigger di sistema è necessario eseguire una select nella vista appropriata:
[code]
select * from sys.server_triggers
[/code]
differente dai tradizionali trigger su database che vengono elencati nella vista sys.triggers
Nessun commento:
Posta un commento