Criao de log de aes atravs do banco - PostgreSQL

Download Criao de log de aes atravs do banco - PostgreSQL

Post on 22-Nov-2014

463 views

Category:

Data & Analytics

2 download

DESCRIPTION

Esta apresentao foi utilizada na palestra ministrada na Conferncia Brasileira de PostgreSQL, realizada na cidade de Porto Velho - Rondnia - Brasil, em 2013. Ela apresenta uma forma simples de se manter o log das aes realizadas no banco de dados, mantendo um histrico de modificaes.

TRANSCRIPT

  • 1. Marcos Thomaz da Silva Criao de Log de Aes Atravs do Banco de Dados
  • 2. Graduao em Sistemas de Informao Especializao em Bancos de Dados Analista de Tecnologia da Informao da Universidade Federal do Acre Desenvolvedor Clipper, Delphi, PHP e Python Participante e Moderador da Lista Django Brasil; Entusiasta PostgreSQL Scio da Empresa Hydros Consultoria Perfil do Instrutor
  • 3. ... uma expresso utilizada para descrever o processo de registro de eventos relevantes num sistema computacional. 1. Cadastro de um Cliente; 2. Alterao do Preo de um Produto; 3. Insero de uma disciplina a um Curso; 4. Modificao da Nota de um Aluno; 5. Lanamento de uma Venda; 6. Pagamento de uma Conta; 7. Excluso de um Produto; O que so logs?
  • 4. Inicia Lanamento da Venda Efetua a Baixa do Estoque dos Produtos Finaliza Lanamento da Venda Recupera Informaes (Consulta Estoque) SELECT Altera Estoque dos Produtos UPDATE Insere a venda INSERT
  • 5. Insero Alterao Excluso Insert Update Delete
  • 6. Esse registro pode ser utilizado para restabelecer o estado original de um sistema ou para que um administrador conhea o seu comportamento no passado.
  • 7. Estrutura das triggers Outros Bancos de Dados Tabela Trigger PostgreSQL Tabela Trigger Function
  • 8. Como gerar o log?
  • 9. Passo 1. Criar uma tabela para armazenar as informaes
  • 10. Passo 2. Criar as triggers que armazenem a informao
  • 11. Passo 3. Atribuir as trigger functions aos eventos
  • 12. Testando as aes
  • 13. Verificando a tabela de Log
  • 14. 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?
  • 15. Variveis Especiais VARIVEL DESCRIO NEW Tipo RECORD que contm o Novo valor dos campos de uma tabela (Insert / Update) OLD Tipo RECORD que contm os valores antigos de Campos (Update/Delete) TG_OP String indicando a operao (INSERT, UPDATE, DELETE, TRUNCATE) TG_RELNAME / TG_TABLE_NAME Nome da tabela envolvida
  • 16. Novo Cdigo Agora temos apenas uma function e uma trigger para cada tabela
  • 17. E se tivermos muitas tabelas??? (800 por exemplo); Usar a varivel TG_TABLE_NAME / TG_REL_NAME?; >> A estrutura da tabela de log como est, atende a todas as situaes? Ser? Conseguimos visualizar quais eram os valores antigos do registro id_log=6??
  • 18. 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 vnculo da(s) trigger(s) de log com as tabelas do banco? Novos problemas surgiram....
  • 19. Valores NEW e OLD so do tipo Record (podem ser percorridos); Podemos pensar em realizar cast; Podemos avaliar o tipo da operao (insert, update, delete); Podemos avaliar de qual tabela est originando a instruo; Podemos pegar os valores do usurio corrente e de data / hora; E o PostgreSQL novamente tem a soluo!
  • 20. Repensando na tabela de log... Criar um campo para armazenar o nome da tabela; Criar um campo para armazenar a data/hora da ocorrncia; Criar um campo para armazenar o usurio; Armazenar valores de OLD e NEW; Resolvendo os problemas...
  • 21. Repensando a function que grava o log; Pegar o nome da tabela; Pegar os dados de OLD e NEW; Resolvendo os problemas...
  • 22. Automatizando o processo de instalao da auditoria para todas as tabelas do banco de dados Listar as tabelas gerando os comandos de criao de tabelas; Resolvendo os problemas...
  • 23. Criar a tabela de log em um tablespace separado. Criar um ndice que permita a busca dos dados na tabela de log (Full Text Search???); Criar (pelo menos) um schema separado para armazenar a trigger global e as functions auxiliares; Recomendaes importantes
  • 24. No utilize o usurio postgres para o banco. Prefira criar um usurio especfico para o acesso; No d permisses de excluso da tabela de log (delete ou drop) para os usurios comuns de acesso a base (preferencialmente, permita apenas a operao de insero insert); No esquecendo da segurana
  • 25. http://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html http://pt.wikipedia.org/wiki/Log_de_dados Referncias
  • 26. Obrigado! Dvidas?? Marcos Thomaz marcosthomazs@gmail.com