Que es una Bitacora
La estructura es ampliamente usada para grabar las modificaciones de la base de datos es la Bitácora, herramienta que permite registrar, analizar detectar y notificar eventos que suceden en cualquier sistemas de informacion utilizado en las organizaciones. La estructura mas ampliamente usada para grabar las modificaciones de la BD.
Cuales son sus funciones
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.
Cada registro de la bitácora escribe una única escritura
de base de datos y tiene lo siguiente :
Nombre de la transacción : Nombre de la transacción que
realizó la operación de escritura.
Nombre del dato : El nombre único del dato escrito.
Valor antiguo : El valor del dato antes de la escritura.
Valor nuevo : El valor que tendrá el dato después de la
escritura.
Es fundamental que siempre se cree un registro en la
bitácora cuando se realice una escritura antes de que se modifique la base de
datos.
También tenemos la posibilidad de deshacer una
modificación que ya se ha escrito en la base de datos, esto se realizará usando
el campo del valor antiguo de los registros de la bitácora.
Los registros de la bitácora deben residir en memoria
estable como resultado el volumen de datos en la bitácora puede ser
exageradamente grande.
Una bitácora puede registrar mucha información acerca de
eventos relacionados con el sistema que la genera los cuales pueden ser:
• Fecha y
hora.
• Host
origen.
• Usuario.
• Actividad
realizada.
Ejemplo de una creacion de una bitacora en MySQL
Enseguida
plantearé un ejemplo de una bitácora desarrollada para la siguiente base de
datos de MySQL, llamada proyecto, que tiene las tablas carrera, departamento y
maestros.
CREATE DATABASE
proyecto;
USE proyecto
CREATE TABLE IF NOT
EXISTS `carrera` (`clave_carrera` int(11) NOT NULL, `nom_carrera` varchar(20)
NOT NULL, `num_depto` int(11) NOT NULL, PRIMARY KEY (`clave_carrera`), KEY
`num_depto` (`num_depto`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT
EXISTS `departamento` ( `num_departamento` int(11) NOT NULL,`nombre_dept`
varchar(20) NOT NULL, `jefe_num_tarjet` int(11) NOT NULL, PRIMARY KEY
(`num_departamento`), KEY `jefe_num_tarjet` (`jefe_num_tarjet`) ) ENGINE=InnoDB
DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT
EXISTS `maestros` (`num_tarjeta` int(11) NOT NULL DEFAULT ’0′,`nombre`
varchar(50) DEFAULT NULL, PRIMARY KEY (`num_tarjeta`)) ENGINE=InnoDB DEFAULT
CHARSET=latin1;
La estructura de la tabla bitácora sería la siguiente:
CREATE TABLE IF NOT
EXISTS `bitacora` (`id` int(11) NOT NULL AUTO_INCREMENT, `operacion`
varchar(10) DEFAULT NULL, `usuario` varchar(40) DEFAULT NULL, `host`
varchar(30) NOT NULL, `modificado` datetime DEFAULT NULL, `tabla` varchar(40)
NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB
DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
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”)
//
DROP TRIGGER IF
EXISTS `bit_depto_ins`;
CREATE TRIGGER
`bit_depto_ins` AFTER INSERT ON `departamento`
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(), “DEPARTAMENTO”)
//
DROP TRIGGER IF
EXISTS `bit_depto_upd`;
CREATE TRIGGER
`bit_depto_upd` AFTER UPDATE ON `departamento`
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(), “DEPARTAMENTO”)
//
DROP TRIGGER IF
EXISTS `bit_depto_del`;
CREATE TRIGGER
`bit_depto_del` AFTER DELETE ON `departamento`
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(), “DEPARTAMENTO”)
//
DROP TRIGGER IF
EXISTS `bit_mae_ins`;
CREATE TRIGGER
`bit_mae_ins` AFTER INSERT ON `maestros`
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(), “MAESTROS”)
//
DROP TRIGGER IF
EXISTS `bit_mae_upd`;
CREATE TRIGGER
`bit_mae_upd` AFTER UPDATE ON `maestros`
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(), “MAESTROS”)
//
DROP TRIGGER IF
EXISTS `bit_mae_del`;
CREATE TRIGGER
`bit_mae_del` AFTER DELETE ON `maestros`
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(), “MAESTROS”)
(y)
ResponderEliminarno funciona :v
ResponderEliminarsi no funciona arreglalo
EliminarTe la mamaste v:
EliminarMe marca error al querer ingresar datos
ResponderEliminarSaludos y gracias
ResponderEliminarjajaja todos copiando codigo
ResponderEliminarmama estoy en la tele
ResponderEliminarEsta madre no sirve, a quién se parecerá?
ResponderEliminar