Bitácora de base de datos
Una bitácora es un registro de acciones.
Una bitácora de base de datos es una estructura que sirve para registrar las transacciones que se
hacen en una base de datos
Para que se utiliza:
Para analizar y auditar las modificaciones y sobre todo para deshacer dicha modificación, es parte de
la seguridad de la base de datos.
La importancia de las bitácoras es la de recuperar información ante incidentes de seguridad,
detección de comportamiento inusual, información para resolver problemas, evidencia legal, es de
gran ayuda en las tareas de cómputo forense. En caso de duda, en la bitácora está registrado lo que
se hizo, cuándo se hizo y quién lo hizo y en caso de querer aplicar la atomicidad es necesario contar
con ella, ya que de ahí se tomará la información para restaurarla.
Cada registro contiene:
• Nombre de la transacción: Nombre de la transacción que realizó la operación de escritura.
Puede ser inserción, eliminación, actualización incluso consulta. El valor es definido por el creador de
la bitácora, es decir se puede poner un número o siglas. Inserción = INS o 001, Eliminación = ELM o
002, etc.
• Nombre del dato : El nombre único del dato sobre el que se hace la transacción.
• Valor antiguo : El valor del dato antes de la trsnsacción.
• Valor nuevo : El valor que tendrá el dato después de la transacción
Usuario, fecha y hora
La bitácora debe registrar todos los movimientos (insertar, eliminar y modificar) que se realicen en
las tablas de la base de datos. Para lograr lo anterior es necesario crear un trigger para que se ejecute
después de la operación de insertar, otro para después de eliminar y el último para después de
modificar para cada una de las 3 tablas de la base de datos. Los nueve triggers necesarios para que
funcione la bitácora son los siguientes:
DROP TRIGGER IF EXISTS `bit_carr_ins`;
DELIMITER //
CREATE TRIGGER `bitacora` AFTER INSERT ON `carrera`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES
(SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “INSERTAR”,
NOW(), “CARRERA”)
//
DROP TRIGGER IF EXISTS `bit_carr_upd`;
CREATE TRIGGER `bit_carr_upd` AFTER UPDATE ON `carrera`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES
(SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)),
“ACTUALIZAR”, NOW(), “CARRERA”)
//
DROP TRIGGER IF EXISTS `bit_carr_del`;
CREATE TRIGGER `bit_carr_del` AFTER DELETE ON `carrera`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES
(SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ELIMINAR”,
NOW(), “CARRERA”)
//
Otra manera de hacerlo es tener una bitácora por tabla en la cual se tengan todos los campos de la
tabla anterior y nuevo, por ejemplo:
Si tenemos la tabla