SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
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 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
• “...é 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?
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
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 o seu
comportamento no passado.”
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 uma única tabela criamos 6 objetos!
O que fazer???
Bom né?.. Será?
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
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 tabela de log como está, atende a todas as situações?
Será?
Conseguimos visualizar quais eram os valores
antigos do registro id_log=6??
• 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....
• 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!
• 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...
• 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 os comandos de criação de tabelas;
Resolvendo os problemas...
• 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
• 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
• 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

Mais conteúdo relacionado

Mais procurados

Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixCris Fidelix
 
Aula07 - Sistemas Distribuídos - Aula de Revisão da NP1
Aula07 - Sistemas Distribuídos - Aula de Revisão da NP1Aula07 - Sistemas Distribuídos - Aula de Revisão da NP1
Aula07 - Sistemas Distribuídos - Aula de Revisão da NP1Messias Batista
 
확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안 확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안 IMQA
 
Software Livre no Banco do Brasil: como o BB economizou R$ 50 milhões de reai...
Software Livre no Banco do Brasil: como o BB economizou R$ 50 milhões de reai...Software Livre no Banco do Brasil: como o BB economizou R$ 50 milhões de reai...
Software Livre no Banco do Brasil: como o BB economizou R$ 50 milhões de reai...marioaxavier7
 
Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1Elaine Cecília Gatto
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em JavaDenis L Presciliano
 
Desenvolvimento de Sistemas Interativos - Integração das Visões de Engenharia...
Desenvolvimento de Sistemas Interativos - Integração das Visões de Engenharia...Desenvolvimento de Sistemas Interativos - Integração das Visões de Engenharia...
Desenvolvimento de Sistemas Interativos - Integração das Visões de Engenharia...André Constantino da Silva
 
Sistema de arquivos - HPFS e ReiserFS/4
Sistema de arquivos - HPFS e ReiserFS/4Sistema de arquivos - HPFS e ReiserFS/4
Sistema de arquivos - HPFS e ReiserFS/4Anderson Rodrigues
 
Modelos de Processo de Software Parte 5
Modelos de Processo de Software Parte 5Modelos de Processo de Software Parte 5
Modelos de Processo de Software Parte 5Elaine Cecília Gatto
 
Sistemas Distribuídos - Comunicação Distribuída – Middleware
Sistemas Distribuídos - Comunicação Distribuída – MiddlewareSistemas Distribuídos - Comunicação Distribuída – Middleware
Sistemas Distribuídos - Comunicação Distribuída – MiddlewareAdriano Teixeira de Souza
 
MDL - Elaborando diagramas em Micro Development Language
MDL - Elaborando diagramas em Micro Development LanguageMDL - Elaborando diagramas em Micro Development Language
MDL - Elaborando diagramas em Micro Development LanguageGustavo Sanchez - Palência
 

Mais procurados (20)

Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
 
Aula07 - Sistemas Distribuídos - Aula de Revisão da NP1
Aula07 - Sistemas Distribuídos - Aula de Revisão da NP1Aula07 - Sistemas Distribuídos - Aula de Revisão da NP1
Aula07 - Sistemas Distribuídos - Aula de Revisão da NP1
 
확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안 확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안
 
Arquitetura Limpa em .NET Core
Arquitetura Limpa em .NET CoreArquitetura Limpa em .NET Core
Arquitetura Limpa em .NET Core
 
Software Livre no Banco do Brasil: como o BB economizou R$ 50 milhões de reai...
Software Livre no Banco do Brasil: como o BB economizou R$ 50 milhões de reai...Software Livre no Banco do Brasil: como o BB economizou R$ 50 milhões de reai...
Software Livre no Banco do Brasil: como o BB economizou R$ 50 milhões de reai...
 
Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Desenvolvimento de Sistemas Interativos - Integração das Visões de Engenharia...
Desenvolvimento de Sistemas Interativos - Integração das Visões de Engenharia...Desenvolvimento de Sistemas Interativos - Integração das Visões de Engenharia...
Desenvolvimento de Sistemas Interativos - Integração das Visões de Engenharia...
 
Clean Code
Clean CodeClean Code
Clean Code
 
Sistema de arquivos - HPFS e ReiserFS/4
Sistema de arquivos - HPFS e ReiserFS/4Sistema de arquivos - HPFS e ReiserFS/4
Sistema de arquivos - HPFS e ReiserFS/4
 
Modulo 15 PSI
Modulo 15 PSIModulo 15 PSI
Modulo 15 PSI
 
Introdução ao MySQL
Introdução ao MySQLIntrodução ao MySQL
Introdução ao MySQL
 
Páginas dinâmicas
Páginas dinâmicasPáginas dinâmicas
Páginas dinâmicas
 
Modelos de Processo de Software Parte 5
Modelos de Processo de Software Parte 5Modelos de Processo de Software Parte 5
Modelos de Processo de Software Parte 5
 
SI - Arquiteturas
SI - ArquiteturasSI - Arquiteturas
SI - Arquiteturas
 
Ciclo desenvolvimento de sistemas
Ciclo desenvolvimento de sistemasCiclo desenvolvimento de sistemas
Ciclo desenvolvimento de sistemas
 
Powershell Demo Presentation
Powershell Demo PresentationPowershell Demo Presentation
Powershell Demo Presentation
 
Sistemas Distribuídos - Comunicação Distribuída – Middleware
Sistemas Distribuídos - Comunicação Distribuída – MiddlewareSistemas Distribuídos - Comunicação Distribuída – Middleware
Sistemas Distribuídos - Comunicação Distribuída – Middleware
 
MDL - Elaborando diagramas em Micro Development Language
MDL - Elaborando diagramas em Micro Development LanguageMDL - Elaborando diagramas em Micro Development Language
MDL - Elaborando diagramas em Micro Development Language
 
Curso MySQL #01 - Surgimento dos Bancos de Dados
Curso MySQL #01 - Surgimento dos Bancos de DadosCurso MySQL #01 - Surgimento dos Bancos de Dados
Curso MySQL #01 - Surgimento dos Bancos de Dados
 

Destaque

Criação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLCriação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLMarcos Thomaz
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
Funções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQLFunções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQLLeonardo Cezar
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
Situação da migração para PostgreSQL
Situação da migração para PostgreSQLSituação da migração para PostgreSQL
Situação da migração para PostgreSQLLeonardo Cezar
 
Hydros - Apresentação para Investidores
Hydros - Apresentação para InvestidoresHydros - Apresentação para Investidores
Hydros - Apresentação para InvestidoresMarcos Thomaz
 
Versionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQLVersionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQLLeonardo Cezar
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesMarcos Thomaz
 
Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLLeonardo Cezar
 
Interoperabilidade dados abertos
Interoperabilidade dados abertosInteroperabilidade dados abertos
Interoperabilidade dados abertosLeonardo Cezar
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosMarcos Thomaz
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento Marcos Thomaz
 
Minimax e corte alfa beta
Minimax e corte alfa betaMinimax e corte alfa beta
Minimax e corte alfa betaMarcos Thomaz
 
VMware and Puppet: How to Plan, Deploy & Manage Modern Applications
VMware and Puppet: How to Plan, Deploy & Manage Modern ApplicationsVMware and Puppet: How to Plan, Deploy & Manage Modern Applications
VMware and Puppet: How to Plan, Deploy & Manage Modern ApplicationsPuppet
 

Destaque (18)

Criação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLCriação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQL
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
Funções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQLFunções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQL
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
Migracao colaborativa
Migracao colaborativaMigracao colaborativa
Migracao colaborativa
 
Situação da migração para PostgreSQL
Situação da migração para PostgreSQLSituação da migração para PostgreSQL
Situação da migração para PostgreSQL
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
 
Hydros - Apresentação para Investidores
Hydros - Apresentação para InvestidoresHydros - Apresentação para Investidores
Hydros - Apresentação para Investidores
 
Postgre sql +python
Postgre sql +pythonPostgre sql +python
Postgre sql +python
 
Sql proficiente
Sql proficienteSql proficiente
Sql proficiente
 
Versionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQLVersionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQL
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
 
Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQL
 
Interoperabilidade dados abertos
Interoperabilidade dados abertosInteroperabilidade dados abertos
Interoperabilidade dados abertos
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos Comandos
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
Minimax e corte alfa beta
Minimax e corte alfa betaMinimax e corte alfa beta
Minimax e corte alfa beta
 
VMware and Puppet: How to Plan, Deploy & Manage Modern Applications
VMware and Puppet: How to Plan, Deploy & Manage Modern ApplicationsVMware and Puppet: How to Plan, Deploy & Manage Modern Applications
VMware and Puppet: How to Plan, Deploy & Manage Modern Applications
 

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

Análise Automatizada em Trilha de Auditoria
Análise Automatizada em Trilha de AuditoriaAnálise Automatizada em Trilha de Auditoria
Análise Automatizada em Trilha de Auditoriajeantalons
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQlCezar Souza
 
PostgreSQL Conceitos e aplicações - FSA
PostgreSQL  Conceitos e aplicações - FSAPostgreSQL  Conceitos e aplicações - FSA
PostgreSQL Conceitos e aplicações - FSAFabio Telles Rodriguez
 
Replicação Lógica no PostgreSQL 10
Replicação Lógica no PostgreSQL 10Replicação Lógica no PostgreSQL 10
Replicação Lógica no PostgreSQL 10Euler Taveira
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
 
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012 Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012 Bruno Caimar
 
Banco de dados comandos sql
Banco de dados   comandos sqlBanco de dados   comandos sql
Banco de dados comandos sqlNilson Augustini
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Dickson S. Guedes
 
PrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e DocumentaçãoPrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e Documentaçãoelliando dias
 
Exemplo e caso prático do uso de base de dados
Exemplo e caso prático do uso de base de dadosExemplo e caso prático do uso de base de dados
Exemplo e caso prático do uso de base de dadosLuis Borges Gouveia
 
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftPath to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftAmazon Web Services LATAM
 
Real time replication using Kafka Connect
Real time replication using Kafka ConnectReal time replication using Kafka Connect
Real time replication using Kafka Connectconfluent
 
Modulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptxModulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptxAugustoNicolau2
 

Semelhante a Criação de log de ações através do banco (20)

Análise Automatizada em Trilha de Auditoria
Análise Automatizada em Trilha de AuditoriaAnálise Automatizada em Trilha de Auditoria
Análise Automatizada em Trilha de Auditoria
 
PostgreSQL Conceitos e aplicações
PostgreSQL  Conceitos e aplicaçõesPostgreSQL  Conceitos e aplicações
PostgreSQL Conceitos e aplicações
 
Otimizando a performance com in-memory no SQL 2016
Otimizando a performance com in-memory no SQL 2016Otimizando a performance com in-memory no SQL 2016
Otimizando a performance com in-memory no SQL 2016
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 
PostgreSQL Conceitos e aplicações - FSA
PostgreSQL  Conceitos e aplicações - FSAPostgreSQL  Conceitos e aplicações - FSA
PostgreSQL Conceitos e aplicações - FSA
 
Replicação Lógica no PostgreSQL 10
Replicação Lógica no PostgreSQL 10Replicação Lógica no PostgreSQL 10
Replicação Lógica no PostgreSQL 10
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012 Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012
 
Banco de dados comandos sql
Banco de dados   comandos sqlBanco de dados   comandos sql
Banco de dados comandos sql
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016
 
PrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e DocumentaçãoPrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e Documentação
 
Exemplo e caso prático do uso de base de dados
Exemplo e caso prático do uso de base de dadosExemplo e caso prático do uso de base de dados
Exemplo e caso prático do uso de base de dados
 
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftPath to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
 
pgDay Campinas – 2015
pgDay Campinas – 2015pgDay Campinas – 2015
pgDay Campinas – 2015
 
Introdução ao BD Postgre
Introdução ao BD PostgreIntrodução ao BD Postgre
Introdução ao BD Postgre
 
Real time replication using Kafka Connect
Real time replication using Kafka ConnectReal time replication using Kafka Connect
Real time replication using Kafka Connect
 
Modulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptxModulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptx
 
Mapeamento de herança OR
Mapeamento de herança ORMapeamento de herança OR
Mapeamento de herança OR
 
Aula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLiteAula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLite
 

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

  • 1. Marcos Thomaz da Silva Criação de Log de Ações Através do Banco de Dados
  • 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. • “...é 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. 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
  • 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.
  • 8. Estrutura das triggers Outros Bancos de Dados Tabela Trigger PostgreSQL Tabela Trigger Function
  • 10. Passo 1. Criar uma tabela para armazenar as informações
  • 11. Passo 2. Criar as trigger’s que armazenem a informação
  • 12. Passo 3. Atribuir as trigger functions aos eventos
  • 15. • 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á?
  • 16. 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
  • 17. Novo Código Agora temos apenas uma function e uma trigger para cada tabela
  • 18. • 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??
  • 19. • 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....
  • 20. • 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!
  • 21. • 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...
  • 22. • Repensando a function que grava o log; ▫ Pegar o nome da tabela; ▫ Pegar os dados de OLD e NEW; Resolvendo os problemas...
  • 23. • 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...
  • 24. • 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
  • 25. • 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