SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Introduction à ElasticSearch
Introduction à ElasticSearchIntroduction à ElasticSearch
Introduction à ElasticSearch
Fadel Chafai
 
Best practices for content delivery using amazon cloud front
Best practices for content delivery using amazon cloud frontBest practices for content delivery using amazon cloud front
Best practices for content delivery using amazon cloud front
Amazon Web Services
 
Active Directory Services
Active Directory ServicesActive Directory Services
Active Directory Services
Varun Arora
 

Was ist angesagt? (20)

LDAP
LDAPLDAP
LDAP
 
Oracle database 12c advanced replication
Oracle database 12c advanced replicationOracle database 12c advanced replication
Oracle database 12c advanced replication
 
Introduction à ElasticSearch
Introduction à ElasticSearchIntroduction à ElasticSearch
Introduction à ElasticSearch
 
APEX Connect 2019 - SQL Tuning 101
APEX Connect 2019 - SQL Tuning 101APEX Connect 2019 - SQL Tuning 101
APEX Connect 2019 - SQL Tuning 101
 
ElasticSearch Basic Introduction
ElasticSearch Basic IntroductionElasticSearch Basic Introduction
ElasticSearch Basic Introduction
 
Best practices for content delivery using amazon cloud front
Best practices for content delivery using amazon cloud frontBest practices for content delivery using amazon cloud front
Best practices for content delivery using amazon cloud front
 
The Ldap Protocol
The Ldap ProtocolThe Ldap Protocol
The Ldap Protocol
 
IBM GPFS
IBM GPFSIBM GPFS
IBM GPFS
 
Active Directory Services
Active Directory ServicesActive Directory Services
Active Directory Services
 
How to size up an Apache Cassandra cluster (Training)
How to size up an Apache Cassandra cluster (Training)How to size up an Apache Cassandra cluster (Training)
How to size up an Apache Cassandra cluster (Training)
 
Hadoop Overview & Architecture
Hadoop Overview & Architecture  Hadoop Overview & Architecture
Hadoop Overview & Architecture
 
Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...
Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...
Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...
 
LDAP
LDAPLDAP
LDAP
 
SPARQL introduction and training (130+ slides with exercices)
SPARQL introduction and training (130+ slides with exercices)SPARQL introduction and training (130+ slides with exercices)
SPARQL introduction and training (130+ slides with exercices)
 
Amazon Aurora: Deep Dive - SRV308 - Chicago AWS Summit
Amazon Aurora: Deep Dive - SRV308 - Chicago AWS SummitAmazon Aurora: Deep Dive - SRV308 - Chicago AWS Summit
Amazon Aurora: Deep Dive - SRV308 - Chicago AWS Summit
 
Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
 
Apache Arrow Flight Overview
Apache Arrow Flight OverviewApache Arrow Flight Overview
Apache Arrow Flight Overview
 
Découverte de Elastic search
Découverte de Elastic searchDécouverte de Elastic search
Découverte de Elastic search
 
Big data Hadoop presentation
Big data  Hadoop  presentation Big data  Hadoop  presentation
Big data Hadoop presentation
 
Introduction to elasticsearch
Introduction to elasticsearchIntroduction to elasticsearch
Introduction to elasticsearch
 

Andere mochten auch

PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
Leonardo 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 PostgreSQL
Leonardo Cezar
 
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
Leonardo Cezar
 
Interoperabilidade dados abertos
Interoperabilidade dados abertosInteroperabilidade dados abertos
Interoperabilidade dados abertos
Leonardo Cezar
 
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
Puppet
 

Andere mochten auch (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
 

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

PrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e DocumentaçãoPrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e Documentação
elliando dias
 

Ähnlich wie 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