Trilha de Auditoria
description
Transcript of Trilha de Auditoria
BANCO DE DADOS II
Trilha de Auditoria
Página 1 de 3
Trilha de Auditoria (Log) Com utilização de Triggers
Objetivo: Criar uma trilha de auditoria para a tabela “Empregados”, possibilitando rastrear todas as operações de inclusão, alteração e exclusão da tabela.
As informações a serem armazenadas são:
Data
Hora
Operação (Inclusão, Alteração ou Exclusão)
Tabela
Valores anteriores
Valores novos Passo 1: Criar a tabela para armazenar as informações TABELA: AUDITORIA
Campo Tipo
ID_AUDITORIA INT AUTO_INCREMENT PK
DT_EVENTO DATETIME
ST_TABELA VARCHAR(60)
ST_OPERACAO VARCHAR(10)
ST_VLR_ANTIGO VARCHAR(1000)
ST_VLR_NOVO VARCHAR(1000)
Passo 2: Criar as triggers em PL/MySQL Trigger 1: After Insert
Criar uma variável para receber os valores a serem inseridos
Concatenar os valores de inserção e jogar na variável criada
Inserir o registro na tabela auditoria Trigger 2: After Update
Criar duas variáveis, uma para valor antigo e outra para o valor novo
Concatenar os valores antigos na variável antiga
BANCO DE DADOS II
Trilha de Auditoria
Página 2 de 3
Concatenar os valores novos na variável nova Trigger 3: After Delete
Criar uma variável para receber o valor excluído
Concatenar os valores na variável criada
Inserir o registro na tabela de auditoria Comandos PL/MySQL a serem usados:
a) Declaração de variáveis e manipulação de valores DECLARE <variável> <tipo> SET <variável> = <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
BANCO DE DADOS II
Trilha de Auditoria
Página 3 de 3
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 ;