Pagine

lunedì 20 luglio 2015

SQL SERVER - Trigger per eventi di DROP o CREATE di Databases

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