Uso de los DDL Triggers en MS SQL Server 2005-2008


Cuando tenemos necesidad de monitorear la seguridad de nuestros servidores, podemos emplear los DDL Triggers. En esta ocasión incluimos un ejemplo de paso a paso que nos brinde la oportunidad de explorar esta funcionalidad.

  1. Ingresar a MS Server Managent Studio 2005 ó 2008.
  2. Crear una base de datos asignando el nombre dbDemo.
  3. Escribimos las siguientes instrucciones T-SQL para activar un DDL Trigger.
    1. Verificamos que no exista el trigger, en caso contrario se elimina.

      USE dbDemo;

      GO

      IF OBJECT_ID(‘tgCrearTabla’) IS NOT NULL

      DROP TRIGGER (‘tgCrearTabla’)

      GO

    2. Crear el DDL trigger a nivel de la Base de Datos dbDemo que va a monitorear la creación de tablas.

      USE dbDemo;

      GO

      CREATE TRIGGER tgCrearTabla

      ON DATABASE

      FOR CREATE_TABLE

      AS

      BEGIN

      DECLARE @event_data XML;        

      SELECT @event_data = EVENTDATA();

      DECLARE @event_type NVARCHAR(2000);

      DECLARE @command NVARCHAR(2000);

      SELECT @event_type = @event_data.value(N'(/EVENT_INSTANCE/EventType)[1]’,

      N’NVARCHAR(2000)’);

      SELECT @command = @event_data.value(

      N'(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]’, N’NVARCHAR(2000)’);

      PRINT N’Event type = ‘ + @event_type;

      PRINT N’La instrucción T-SQL que active el trigger fue = ‘ + @command;

      PRINT N’Event data = ‘ + CAST(@event_data AS NVARCHAR(MAX));

      END

      GO

    3. Finalmente probamos el trigger escribiendo la instrucción T-SQL.

      USE dbDemo;

      GO

      –Evaluar el trigger.

      CREATE TABLE catVehiculo

      (idVehiculo INT NOT NULL PRIMARY KEY,

      descVehiculo varchar(50));

      GO

      — Eliminar la tabla.

      DROP TABLE catVehiculo;

      GO

      –Eliminar el trigger.

      DROP TRIGGER tgCrearTabla

      ON DATABASE;

      GO

Al ejecutar el paso anterior, podemos apreciar en pantalla la impresión de las instrucción PRINT emitidas por el DDL trigger.

Ahora bien, me siento comprometidoa incluir una breve tabla con todos los TAGS que genera la función EVENTDATA() y los cuales he resaltado en negrita. Cada uno de ellos nos dará la oportunidad de manipular el resultado y así, poder almacenarlo en una tabla de auditoría.

<EVENT_INSTANCE>

<EventType>CREATE_TABLE</EventType>

<PostTime>2011-04-4T20:13:40.090</PostTime>

<SPID>51</SPID>

<ServerName>W2008ENT</ServerName>

<LoginName>W2008ENT\Administrator</LoginName>

<UserName>dbo</UserName>

<DatabaseName>dbDemo</DatabaseName>

<SchemaName>dbo</SchemaName>

<ObjectName>NewTable</ObjectName>

<ObjectType>TABLE</ObjectType>

<TSQLCommand>

    <SetOptions ANSI_NULLS=”ON”     

    ANSI_NULL_DEFAULT=”ON”

    ANSI_PADDING=”ON”     

    QUOTED_IDENTIFIER=”ON” ENCRYPTED=”FALSE”/>

<CommandText>CREATE TABLE NewTable (Column1 INT NOT NULL PRIMARY KEY);

</CommandText>

</TSQLCommand>

</EVENT_INSTANCE>

 

Espero que lo implementen en su empresa, son una buena herramienta para supervisar el trabajo de los equipos de desarrollo de software y apoyo para cualquier DBA.

Saludos

No comments yet

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: