criação de log de ações através do banco - postgresql

of 27 /27
Marcos Thomaz da Silva Criação de Log de Ações Através do Banco de Dados

Upload: marcos-thomaz

Post on 22-Nov-2014

489 views

Category:

Data & Analytics


2 download

DESCRIPTION

Esta apresentação foi utilizada na palestra ministrada na Conferência Brasileira de PostgreSQL, realizada na cidade de Porto Velho - Rondônia - Brasil, em 2013. Ela apresenta uma forma simples de se manter o log das ações realizadas no banco de dados, mantendo um histórico de modificações.

TRANSCRIPT

Page 1: Criação de log de ações através do banco - PostgreSQL

Marcos Thomaz da Silva

Criação de Log de Ações Através do Banco de Dados

Page 2: Criação de log de ações através do banco - PostgreSQL

• Graduação em Sistemas de Informação

• Especialização em Bancos de Dados

• Analista de Tecnologia da Informação da Universidade Federal do Acre

• Desenvolvedor Clipper, Delphi, PHP e Python

• Participante e Moderador da Lista Django Brasil;

• Entusiasta PostgreSQL

• Sócio da Empresa Hydros Consultoria

Perfil do Instrutor

Page 3: Criação de log de ações através do banco - PostgreSQL

• “...é uma expressão utilizada para descrever o processo de registro de eventos relevantes num sistema computacional. ”1. Cadastro de um Cliente;

2. Alteração do Preço de um Produto;

3. Inserção de uma disciplina a um Curso;

4. Modificação da Nota de um Aluno;

5. Lançamento de uma Venda;

6. Pagamento de uma Conta;

7. Exclusão de um Produto;

O que são logs?

Page 4: Criação de log de ações através do banco - PostgreSQL

Inicia Lançamento da Venda

Efetua a Baixa do Estoque dos Produtos

Finaliza Lançamento da Venda

Recupera Informações (Consulta Estoque)

SELECT

Altera Estoque dos ProdutosUPDATE

Insere a vendaINSERT

Page 5: Criação de log de ações através do banco - PostgreSQL

Inserção Alteração Exclusão

Insert Update Delete

Page 6: Criação de log de ações através do banco - PostgreSQL

• “Esse registro pode ser utilizado para restabelecer o estado original de um sistema ou para que um administrador conheça o seu comportamento no passado.”

Page 7: Criação de log de ações através do banco - PostgreSQL
Page 8: Criação de log de ações através do banco - PostgreSQL

Estrutura das triggers

Outros Bancos de Dados

Tabela

Trigger

PostgreSQL

Tabela

Trigger Function

Page 9: Criação de log de ações através do banco - PostgreSQL

Como gerar o log?

Page 10: Criação de log de ações através do banco - PostgreSQL

Passo 1. Criar uma tabela para armazenar as informações

Page 11: Criação de log de ações através do banco - PostgreSQL

Passo 2. Criar as trigger’s que armazenem a informação

Page 12: Criação de log de ações através do banco - PostgreSQL

Passo 3. Atribuir as trigger functions aos eventos

Page 13: Criação de log de ações através do banco - PostgreSQL

Testando as ações

Page 14: Criação de log de ações através do banco - PostgreSQL

Verificando a tabela de Log

Page 15: Criação de log de ações através do banco - PostgreSQL

• Foram criadas 3 functions (uma para cada evento);

• Foram criadas 3 triggers (uma cada cada evento);

• No total, para uma única tabela criamos 6 objetos!

O que fazer???

Bom né?.. Será?

Page 16: Criação de log de ações através do banco - PostgreSQL

Variáveis Especiais

VARIÁVEL DESCRIÇÃO

NEW Tipo RECORD que contém o Novo valor dos campos de uma tabela (Insert / Update)

OLD Tipo RECORD que contém os valores antigos de Campos (Update/Delete)

TG_OP String indicando a operação (INSERT, UPDATE, DELETE, TRUNCATE)

TG_RELNAME / TG_TABLE_NAME Nome da tabela envolvida

Page 17: Criação de log de ações através do banco - PostgreSQL

Novo Código

Agora temos apenas uma function e uma trigger para cada tabela

Page 18: Criação de log de ações através do banco - PostgreSQL

• E se tivermos muitas tabelas??? (800 por exemplo);

• Usar a variável TG_TABLE_NAME / TG_REL_NAME?; >>

• A estrutura da tabela de log como está, atende a todas as situações?

Será?

Conseguimos visualizar quais eram os valores antigos do registro id_log=6??

Page 19: Criação de log de ações através do banco - PostgreSQL

• Como criar algo que sirva para todas as tabelas do banco??

• Como saber quando foi executado e por quem?

• Nos casos de Update, como armazenar os valores novos e os antigos??

• Como automatizar o processo de vínculo da(s) trigger(s) de log com as tabelas do banco?

Novos problemas surgiram....

Page 20: Criação de log de ações através do banco - PostgreSQL

• Valores NEW e OLD são do tipo Record (podem ser percorridos);

• Podemos pensar em realizar cast;

• Podemos avaliar o tipo da operação (insert, update, delete);

• Podemos avaliar de qual tabela está originando a instrução;

• Podemos pegar os valores do usuário corrente e de data / hora;

E o PostgreSQL novamente tem a solução!

Page 21: Criação de log de ações através do banco - PostgreSQL

• Repensando na tabela de log...▫ Criar um campo para armazenar o nome da tabela;

▫ Criar um campo para armazenar a data/hora da ocorrência;

▫ Criar um campo para armazenar o usuário;

▫ Armazenar valores de OLD e NEW;

Resolvendo os problemas...

Page 22: Criação de log de ações através do banco - PostgreSQL

• Repensando a function que grava o log;▫ Pegar o nome da tabela;

▫ Pegar os dados de OLD e NEW;

Resolvendo os problemas...

Page 23: Criação de log de ações através do banco - PostgreSQL

• Automatizando o processo de instalação da auditoria para todas as tabelas do banco de dados▫ Listar as tabelas gerando os comandos de criação de tabelas;

Resolvendo os problemas...

Page 24: Criação de log de ações através do banco - PostgreSQL

• Criar a tabela de log em um tablespace separado.

• Criar um índice que permita a busca dos dados na tabela de log (FullText Search???);

• Criar (pelo menos) um schema separado para armazenar a trigger global e as functions auxiliares;

Recomendações importantes

Page 25: Criação de log de ações através do banco - PostgreSQL

• Não utilize o usuário postgres para o banco. Prefira criar um usuário específico para o acesso;

• Não dê permissões de exclusão da tabela de log (delete ou drop) para os usuários comuns de acesso a base (preferencialmente, permita apenas a operação de inserção – insert);

Não esquecendo da segurança

Page 27: Criação de log de ações através do banco - PostgreSQL

Obrigado!

Dúvidas??

Marcos [email protected]