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

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

Post on 22-Nov-2014

463 views

Category:

Data & Analytics

2 download

Embed Size (px)

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

<ul><li> 1. Marcos Thomaz da Silva Criao de Log de Aes Atravs do Banco de Dados </li> <li> 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 </li> <li> 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? </li> <li> 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 </li> <li> 5. Insero Alterao Excluso Insert Update Delete </li> <li> 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. </li> <li> 7. Estrutura das triggers Outros Bancos de Dados Tabela Trigger PostgreSQL Tabela Trigger Function </li> <li> 8. Como gerar o log? </li> <li> 9. Passo 1. Criar uma tabela para armazenar as informaes </li> <li> 10. Passo 2. Criar as triggers que armazenem a informao </li> <li> 11. Passo 3. Atribuir as trigger functions aos eventos </li> <li> 12. Testando as aes </li> <li> 13. Verificando a tabela de Log </li> <li> 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? </li> <li> 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 </li> <li> 16. Novo Cdigo Agora temos apenas uma function e uma trigger para cada tabela </li> <li> 17. E se tivermos muitas tabelas??? (800 por exemplo); Usar a varivel TG_TABLE_NAME / TG_REL_NAME?; &gt;&gt; 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?? </li> <li> 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.... </li> <li> 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! </li> <li> 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... </li> <li> 21. Repensando a function que grava o log; Pegar o nome da tabela; Pegar os dados de OLD e NEW; Resolvendo os problemas... </li> <li> 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... </li> <li> 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 </li> <li> 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 </li> <li> 25. http://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html http://pt.wikipedia.org/wiki/Log_de_dados Referncias </li> <li> 26. Obrigado! Dvidas?? Marcos Thomaz marcosthomazs@gmail.com </li> </ul>

Recommended

View more >