Você está na página 1de 3

BANCO DE DADOS II

Trilha de Auditoria
Trilha de Auditoria (Log)
Com utilizao de Triggers
Objetivo: Criar uma trilha de auditoria para a tabela Empregados, possibilitando rastrear
todas as operaes de incluso, alterao e excluso da tabela.

As informaes a serem armazenadas so:


Data
Hora
Operao (Incluso, Alterao ou Excluso)
Tabela
Valores anteriores
Valores novos
Passo 1: Criar a tabela para armazenar as informaes
TABELA: AUDITORIA
Campo
ID_AUDITORIA
DT_EVENTO
ST_TABELA
ST_OPERACAO
ST_VLR_ANTIGO
ST_VLR_NOVO

Tipo
INT AUTO_INCREMENT PK
DATETIME
VARCHAR(60)
VARCHAR(10)
VARCHAR(1000)
VARCHAR(1000)

Passo 2: Criar as triggers em PL/MySQL


Trigger 1: After Insert
Criar uma varivel para receber os valores a serem inseridos
Concatenar os valores de insero e jogar na varivel criada
Inserir o registro na tabela auditoria
Trigger 2: After Update
Criar duas variveis, uma para valor antigo e outra para o valor novo
Concatenar os valores antigos na varivel antiga
Pgina 1 de 3

BANCO DE DADOS II
Trilha de Auditoria

Concatenar os valores novos na varivel nova

Trigger 3: After Delete

Criar uma varivel para receber o valor excludo


Concatenar os valores na varivel criada
Inserir o registro na tabela de auditoria

Comandos PL/MySQL a serem usados:


a) Declarao de variveis e manipulao de valores
DECLARE <varivel> <tipo>
SET <varivel> = <valor>
b) Concatenar valores
CONCAT(Valor1, Valor2, Valor3, ...)
c) Data e hora atual do servidor
NOW()
Script completo:
CREATE TABLE AUDITORIA
(ID_AUDITORIA INT NOT NULL AUTO_INCREMENT,
DT_EVENTO DATETIME,
ST_TABELA VARCHAR(40),
ST_OPERACAO VARCHAR(15),
ST_VLR_ANTIGO VARCHAR(200),
ST_VLR_NOVO VARCHAR(200),
PRIMARY KEY (ID_AUDITORIA));
DELIMITER $$
CREATE TRIGGER trg_auditoria_emp_aft_ins
AFTER INSERT
ON EMPREGADOS
FOR EACH ROW
BEGIN
DECLARE vlr_novo VARCHAR(200);
SET vlr_novo = CONCAT(NEW.Primeiro_Nome, '/', NEW.Ultimo_Nome, '/', NEW.EMail, '/',
NEW.Telefone, '/', NEW.Salario);
INSERT INTO AUDITORIA (DT_EVENTO, ST_TABELA, ST_OPERACAO, ST_VLR_ANTIGO, ST_VLR_NOVO)
VALUES (Now(), 'Empregados', 'Insert', NULL, vlr_novo);
END$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER trg_auditoria_emp_aft_upd
AFTER UPDATE
ON EMPREGADOS
FOR EACH ROW
BEGIN

Pgina 2 de 3

BANCO DE DADOS II
Trilha de Auditoria
DECLARE vlr_antigo VARCHAR(200);
DECLARE vlr_novo VARCHAR(200);
SET vlr_novo = CONCAT(NEW.Primeiro_Nome, '/', NEW.Ultimo_Nome, '/', NEW.EMail, '/', NEW.
Telefone, '/', NEW.Salario);
SET vlr_antigo = CONCAT(OLD.Primeiro_Nome, '/', OLD.Ultimo_Nome, '/', OLD.EMail, '/', OLD.
Telefone, '/', OLD.Salario);
INSERT INTO AUDITORIA (DT_EVENTO, ST_TABELA, ST_OPERACAO, ST_VLR_ANTIGO, ST_VLR_NOVO)
VALUES (Now(), 'Empregados', 'Update', vlr_antigo, vlr_novo);
END$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER trg_auditoria_emp_aft_del
AFTER DELETE
ON EMPREGADOS
FOR EACH ROW
BEGIN
DECLARE vlr_antigo VARCHAR(200);
SET vlr_antigo = CONCAT(OLD.Primeiro_Nome, '/', OLD.Ultimo_Nome, '/', OLD.EMail, '/',
OLD.Telefone, '/', OLD.Salario);
INSERT INTO AUDITORIA (DT_EVENTO, ST_TABELA, ST_OPERACAO, ST_VLR_ANTIGO, ST_VLR_NOVO)
VALUES (Now(), 'Empregados', 'Delete', vlr_antigo, NULL);
END$$
DELIMITER ;

Pgina 3 de 3