Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Necesito un triggers para auditar???

Estas en el tema de Necesito un triggers para auditar??? en el foro de Mysql en Foros del Web. Buenas, resulta que tengo un formulario de modificacion de usuarios, cuando hacen una modificacion (de algunos campos, como ser nombre, apellido, etc) se guardan en ...
  #1 (permalink)  
Antiguo 12/02/2009, 14:09
 
Fecha de Ingreso: diciembre-2008
Mensajes: 190
Antigüedad: 15 años, 4 meses
Puntos: 6
Necesito un triggers para auditar???

Buenas, resulta que tengo un formulario de modificacion de usuarios, cuando hacen una modificacion (de algunos campos, como ser nombre, apellido, etc) se guardan en una tabla USUARIOS y debo registrar todos esos cambios en una tabla AUDITORIA, por ej un usuario modifica su nombre , apellido y edad, entonces en la tabla AUDITORIA deberia registar lo siguiente...
TABLA AUDITORIA

ID --- USUARIOID --- TIPOEVENTOID
1----------13 ------------ 5
2--------- 13 ------------ 6
3----------13 ------------ 2

(tipo evento se relaciona con una tabla q guarda eso , por ej eventoid=5 , es modificar nombre)

Bueno ahora la pregunta, existe manera (trigger o lo q fuere) de poder cargar en esa tabla auditoria los cambios que se realizaron mediante un UPDATE en la tabla USUARIOS?.

Pienso que hacerlo programandolo en php es muy engorroso ya que tengo que fijarme que campos fueron modificados e ir insertando uno a uno en la tabla de auditoria.

Muchas Gracias.
  #2 (permalink)  
Antiguo 13/02/2009, 18:19
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Necesito un triggers para auditar???

compañero!! de ejemplos de auditoria hay muchos en internet!! cuando investigue de triggers solo eso me salia en san google!! jejeje pero como
estamos para ayudar! te mando un ejemplo algo parecido a lo q necesitas
claro, es un copy paste q saque de la pagina para analizar los triggers!! al final
el nombre del autor del codigo!!

Desde la salida de la versión 5 de MySql se pueden usar triggers en nuestras bases de datos.

Peró, ¿qué son los triggers?, son objetos relacionados con tablas y almacenados en la base dedatos que se ejecutan o se muestran cuando sucede algún evento sobre sus tablas asociadas.

Los eventos pueden ser las sentencias INSERT, DELETE, UPDATE que modifican los datos de una tabla. Los triggeres se pueden ejecutar antes (BEFORE) y/o después (AFTER) de que sean modificados los datos.

Los triggers tienen dos palabras clave, OLD y NEW que se refieren a los valores que tienen las columnas antes y después de la modificación. Los INSERT permiten NEW, los DELETE sólo OLD y los UPDATE ambas.

Un ejemplo de trigger seria uno asociado a la sentencia DELETE en una tabla de clientes, para impedir que se elimine uno que tenga un saldo distinto de cero. Otro trigger seria guardar los datos que se modifican de un cliente en otra base de datos que serviria de auditoria.

Crearemos la tabla de clientes y le ponemos algunos registros:

CREATE TABLE clientes(
id int not null auto_increment,
nombre varchar(100),
seccion varchar(10),
PRIMARY KEY(id),
KEY(nombre)
) ENGINE = InnoDB;

INSERT INTO clientes (nombre, seccion) VALUES
('Miguel','informatica'),
('Rosa','comida'),
('Maria','ropa'),
('Albert','informatica'),
('Jordi','comida');

Y una tabla que será la que guardará los datos de la "auditoria"

CREATE TABLE auditoria_clientes
(
id int not null auto_increment,
nombre varchar(100),
anterior_seccion varchar(10),
usuario varchar(40),
modificado datetime,
primary key(id)
) ENGINE = InnoDB;

y finalmente un trigger que se disparará cada vez que alguien modifique un dato de la tabla clientes y lo guardará en una tabla junto al nombre del usuario y la fecha.

CREATE TRIGGER trigger_auditoria_clientes AFTER UPDATE ON clientes
FOR EACH ROW
INSERT INTO auditoria_clientes(name, anterior_seccion, usuario, modificado )
VALUES (OLD.nombre, OLD.seccion, CURRENT_USER(), NOW() );

Autor:Xavier Bernadí i Millan
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:23.