Criao de log de aes atravs do banco - PostgreSQL

Download Criao de log de aes atravs do banco - PostgreSQL

Post on 21-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