Blog gratis
Reportar
Editar
¡Crea tu blog!
Compartir
¡Sorpréndeme!
img
img

 

 

SQL Server
Blog. (Apuntes y Recopilaciones) por Norman M. Pardell

img
img
01 de Septiembre, 2011 · auditoria-ddl-trigger-sql-Server

Mas Auditoría personalizada con triggers en SQL Server. Tema II.

Como ya he contado en otros artículos, ( ver aquí ),  los desencadenadores DDL se pueden ejecutar cada vez que cree, eliminar , modificar… un objeto de base de datos. Estos desencadenador o triggers DDL se les pueden especificar las opciones de disparo (es decir, el tipo de operaciones para las que queremos que se activen).

También he contado en anterior artículo con un ejemplo como se especifica la ejecución de los disparadores cuando se crea una tabla nueva, ( ver aquí ).  Sin embargo, de añadir es que en lugar de especificar un disparador para cada operación, podemos crear un trigger DDL que se dispare con un grupo de operaciones, en ese caso, el disparador se ejecutará con cada una de las operaciones de ese grupo de eventos.  Por ejemplo, si ha especificado DDL_DATABASE_LEVEL_EVENTS en lugar de CREATE_TABLE, se registrará cada eventos de CREATE_TABLE, ALTER_TALBE y DROP_TABLE, tras su ejecución.

Por ejemplo, podemos crear un trigger tal que así:

 

CREATE TRIGGER [ddltrg_CREATE_TABLE_LOG] ON DATABASE

FOR DDL_DATABASE_LEVEL_EVENTS

AS

/* Tu codigo aqui */

EVENTDATA es una función importante en los triggers DDL. La función EVENTDATA () se invoca cada vez un desencadenador DDL se activa. Vamos a ver cuáles son las opciones que podemos utilizar con la función EVENTDATE ().

Además de tener un seguimiento sobre las tablas que son creadas,  Otra requerimiento de los administradores de bases de datos, es evitar que los usuarios creen tablas o cualquier otro objeto que no se ajusta a un estándar. Por ejemplo, si desea evitar que los usuarios creen tablas que no tengan un prefijo como por ejemplo:  TBL’ (que comience el nombre de la tabla por TBL), puede utilizar siguiente desencadenador DDL.

CREATE TRIGGER [ddltrg_CheckCreateTable] ON DATABASE

FOR CREATE_TABLE

AS

SET NOCOUNT ON

DECLARE @xmlEventData XML,

@tableName VARCHAR(50)

SET @xmlEventData = eventdata()

SET @tableName = CONVERT(VARCHAR(25), @xmlEventData.query(data(/EVENT_INSTANCE/ObjectName)))

IF LEFT(@tableName, 3) <>tbl

BEGIN

RAISERROR (tu no puedes create table cuyo nombre no comienza por tbl,

16,- 1 )

ROLLBACK

END

GO

Ahora si intentásemos crear una tabla como la siguiente:

CREATE TABLE Customer

(

ID INT,

Desccription VARCHAR(50)

)

 

Obtendriamos un error y la tabla no se … Obteniendo la salida


Msg 50.000, nivel 16, estado 1, procedimiento ddltrg_, Línea 17
No se puede crear nombre de la tabla sin necesidad de iniciar con TBL
Msg 3609, Nivel 16, Estado 2, Línea 1
La transacción terminó en el gatillo. El lote ha sido abortada.



Se puede ampliar el desencadenador DDL para incluir a los procedimientos almacenados, funciones, esquemas…

  Además, si desea evitar que los usuarios hagan ALTER_TABLE durante las horas pico, podemos hacer esto mediante la etiqueta XML de PostTime EVENTDATA ().

 

Triggers a nivel de servidor:

 

Podemos querer auditar las operaciones de creación de base de datos, el disparador ha de crearse a nivel de servidor – instancia, como por ejemplo para auditar la creación de las bbdd:

 

CREATE TRIGGER [ddlsvrtrg_CREATE_DATABASE_LOG] ON ALL SERVER

FOR CREATE_DATABASE

AS

/* Tu codigo aqui */

 

Este disparador también tendrá  EVENTDATA ()


En poco, os pondré más ejemplos con desencadenador DDL.


Apunte y recopilación por Norman M. Pardell

Puedes consultarme, si deseas cualquier aclaración, pregunta o sugerencia en: Contacto, contestaré tan pronto como me sea posible.


publicado por normanmpardell a las 03:39 · Sin comentarios  ·  Recomendar
Comentarios (0) ·  Enviar comentario
Esta entrada no admite comentarios.
img
.Sobre mí
FOTO

Norman M. Pardell

MCITP: Database Administrator & Database Developer, SQL Server 2008. MCC Award Certificate. Consultor Senior de bases de datos en Capgemini España, S.L. Asesoramiento en implementación, desarrollo y gestión de bases de datos en grandes compañías. Actualmente, asignado a proyecto en compañía líder en el sector energético global. Más de 10 años trabajando con SQL Server (y otros gestores de BBDD)

» Ver perfil

img
.Secciones
» Inicio
img
.Enlaces
» Microsoft MSDN Foros
» Windows Server 2012
img
.Más leídos
» Asignar la cantidad correcta de Memoria para SQL Server
» Base de Datos Sospechosa (Suspect)
» Como modificar la Intercalación (Collation) en SQL Server
» Como renombrar una instancia de SQL Server. sp_dropserver. sp_addserver
» Detectar bloqueos. SQL Server V.2005 y superiores
» Funciones SQL Server. Funciones escalares y funciones con valores de tabla.
» Integridad y corrupción en las bases de datos: DBCC CHECKDB
» Log de transacciones ( .ldf ). SQL Server.
» Migrando SQL Server 2005, 2008, 2008 R2 a SQL Server 2012
» Transacciones activas. SQL server 2008
img
.Nube de tags [?]
                                                           
img img
FULLServices Network | Crear blog | Privacidad