Implementación de un trigger para auditar cambios en una base de datos

En este artículo vamos a mostrar cómo funciona un disparador (trigger) de tipo DDL y su utilidad en la administración de SQL Server. Antes de entrar en detalle, refresquemos ciertos conceptos básicos sobre los comandos de Transact-SQL. Usaremos la versión SQL Server 2016, edición Developer Comandos DML (Data Manipulation Language).- Son comandos para modificar los[…]

Clausula OUTPUT en SQL SERVER

Generalmente, uno no espera que una sentencia de modificación haga más que modificar datos. Es decir, no esperamos que una sentencia de modificación retorne un resultados. Sin embargo, en algunos escenarios el poder recuperar datos de registros modificados puede ser útil.

Hasta el día de hoy, y desde versiones anteriores de SQL Server, los triggers nos brindan la posibilidad de acceder a las tablas virtuales deleted e inserted en las cuales, solamente durante la ejecución del trigger se podía recuperar, generalmente para razones de auditoría, los registros que eran eliminados, modificados o insertados. Bien, desde SQL Server 2005, existe la opción de […]

Trigger genérico para auditar cambios en una tabla

El siguiente trigger permite auditar los cambios (Inserciones, Actualizaciones y eliminaciones) a una tabla. Es un trigger genérico. Es decir, el mismo trigger funciona para cualquier tabla de la base de datos. Hay que tener en cuenta solo tres cosas:

  1. Se debe crear una tabla de log para almacenar la información de auditoría.
  2. En el script hay que cambiar manualmente el nombre de la tabla sobre la cual se esta creando el trigger.
  3. Solo funciona con tablas que tienen llave primaria.

Este trigger fue diseñado por Nigel Rivett y funciona con las versiones 2005 en adelante. He hecho cambios mínimos de forma y he traducido e incluido comentarios para hacer mas legible y entendible el script.

Lo primero que hay que hacer es crear la tabla de auditoría, sobre la cual el trigger escribirá el detalle de las transacciones realizadas:

CREATETABLEdbo.logTransacciones(

  TipoTrnchar(1),

  Tablavarchar(128),

  PKvarchar(1000),

  Campovarchar(128),

  ValorOriginalvarchar(1000),

  ValorNuevovarchar(1000),

  FechaTrndatetime,

  Usuariovarchar(128))

GO

.

En esta tabla se almacena el tipo de transacción(I-Insert, U-Update, D-Delete), el nombre de la tabla, la llave del registro, el o los campos que han sufrido algún cambio, el valor original y el valor nuevo para las actualizaciones y por ultimo la fecha en la que se hizo el cambio y el usuario que lo ejecutó. Cualquier cambio realizado en cualquier tabla de la base de datos que tenga el trigger, será almacenado aquí

Vamos ahora a crear la tabla Cliente, que nos servirá para […]