Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/05/2009, 16:01
Avatar de acoevil
acoevil
 
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 9 meses
Puntos: 32
Respuesta: Seguridad y Auditoria en php

Podrias realizar una bitacora utilizando Triggers que estan disponibles en MySQL son muy faciles de manejar y ayudan mucho ademas que seria lo masss optimo.

Mira este ejemplo que me sale con ayuda de google




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() );