Marcos Thomaz da Silva
Criação de Log de Ações Através do Banco de
Dados
• Graduação em Sistemas de Informação
• Especialização em Bancos de Dados
• Analista de Tecnologia da Informação da Univer...
• “...é uma expressão utilizada para descrever o processo de registro de
eventos relevantes num sistema computacional. ”
1...
Inicia Lançamento da
Venda
Efetua a Baixa do Estoque
dos Produtos
Finaliza Lançamento da
Venda
Recupera Informações
(Consu...
Inserção Alteração Exclusão
Insert Update Delete
• “Esse registro pode ser utilizado para restabelecer o estado original de
um sistema ou para que um administrador conheça...
Estrutura das triggers
Outros Bancos de Dados
Tabela
Trigger
PostgreSQL
Tabela
Trigger Function
Como gerar o log?
Passo 1. Criar uma tabela para armazenar as informações
Passo 2. Criar as trigger’s que armazenem a informação
Passo 3. Atribuir as trigger functions aos eventos
Testando as ações
Verificando a tabela de Log
• Foram criadas 3 functions (uma para cada evento);
• Foram criadas 3 triggers (uma cada cada evento);
• No total, para um...
Variáveis Especiais
VARIÁVEL DESCRIÇÃO
NEW Tipo RECORD que contém o Novo valor
dos campos de uma tabela (Insert /
Update)
...
Novo Código
Agora temos apenas
uma function e uma
trigger para cada
tabela
• E se tivermos muitas tabelas??? (800 por exemplo);
• Usar a variável TG_TABLE_NAME / TG_REL_NAME?; >>
• A estrutura da t...
• Como criar algo que sirva para todas as tabelas do banco??
• Como saber quando foi executado e por quem?
• Nos casos de ...
• Valores NEW e OLD são do tipo Record (podem ser percorridos);
• Podemos pensar em realizar cast;
• Podemos avaliar o tip...
• Repensando na tabela de log...
▫ Criar um campo para armazenar o nome da tabela;
▫ Criar um campo para armazenar a data/...
• Repensando a function que grava o log;
▫ Pegar o nome da tabela;
▫ Pegar os dados de OLD e NEW;
Resolvendo os problemas....
• Automatizando o processo de instalação da auditoria para todas as
tabelas do banco de dados
▫ Listar as tabelas gerando ...
• Criar a tabela de log em um tablespace separado.
• Criar um índice que permita a busca dos dados na tabela de log (Full
...
• 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 e...
• http://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html
• http://pt.wikipedia.org/wiki/Log_de_dados
Referências
Obrigado!
Dúvidas??
Marcos Thomaz
marcosthomazs@gmail.com
Criação de log de ações através do banco
Nächste SlideShare
Wird geladen in …5
×

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

262 Aufrufe

Veröffentlicht am

  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

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

  1. 1. Marcos Thomaz da Silva Criação de Log de Ações Através do Banco de Dados
  2. 2. • 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
  3. 3. • “...é 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?
  4. 4. 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 Produtos UPDATE Insere a venda INSERT
  5. 5. Inserção Alteração Exclusão Insert Update Delete
  6. 6. • “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.”
  7. 7. Estrutura das triggers Outros Bancos de Dados Tabela Trigger PostgreSQL Tabela Trigger Function
  8. 8. Como gerar o log?
  9. 9. Passo 1. Criar uma tabela para armazenar as informações
  10. 10. Passo 2. Criar as trigger’s que armazenem a informação
  11. 11. Passo 3. Atribuir as trigger functions aos eventos
  12. 12. Testando as ações
  13. 13. Verificando a tabela de Log
  14. 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. 15. 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
  16. 16. Novo Código Agora temos apenas uma function e uma trigger para cada tabela
  17. 17. • 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??
  18. 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 vínculo da(s) trigger(s) de log com as tabelas do banco? Novos problemas surgiram....
  19. 19. • 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!
  20. 20. • 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...
  21. 21. • Repensando a function que grava o log; ▫ Pegar o nome da tabela; ▫ Pegar os dados de OLD e NEW; Resolvendo os problemas...
  22. 22. • 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...
  23. 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; Recomendações importantes
  24. 24. • 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
  25. 25. • http://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html • http://pt.wikipedia.org/wiki/Log_de_dados Referências
  26. 26. Obrigado! Dúvidas?? Marcos Thomaz marcosthomazs@gmail.com

×