SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
 
Security Best Practice: Oracle passwords, but secure!
Security Best Practice: Oracle passwords, but secure!Security Best Practice: Oracle passwords, but secure!
Security Best Practice: Oracle passwords, but secure!Stefan Oehrli
 
Sharding Methods for MongoDB
Sharding Methods for MongoDBSharding Methods for MongoDB
Sharding Methods for MongoDBMongoDB
 
Psi-mod-15
Psi-mod-15Psi-mod-15
Psi-mod-15diogoa21
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL BásicoIgor Alves
 
CORS - Enable Alfresco for CORS
CORS - Enable Alfresco for CORSCORS - Enable Alfresco for CORS
CORS - Enable Alfresco for CORSJared Ottley
 
06 Using More Package Concepts
06 Using More Package Concepts06 Using More Package Concepts
06 Using More Package Conceptsrehaniltifat
 
Optimizing Alert Monitoring with Oracle Enterprise Manager
Optimizing Alert Monitoring with Oracle Enterprise ManagerOptimizing Alert Monitoring with Oracle Enterprise Manager
Optimizing Alert Monitoring with Oracle Enterprise ManagerDatavail
 
How to Performance-Tune Apache Spark Applications in Large Clusters
How to Performance-Tune Apache Spark Applications in Large ClustersHow to Performance-Tune Apache Spark Applications in Large Clusters
How to Performance-Tune Apache Spark Applications in Large ClustersDatabricks
 
PostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesFernando Ike
 
Apresentação HTML e CSS
Apresentação HTML e CSSApresentação HTML e CSS
Apresentação HTML e CSSledsifes
 
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributosLoiane Groner
 

Tendances (20)

Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 
Aula 1
Aula 1Aula 1
Aula 1
 
Security Best Practice: Oracle passwords, but secure!
Security Best Practice: Oracle passwords, but secure!Security Best Practice: Oracle passwords, but secure!
Security Best Practice: Oracle passwords, but secure!
 
Psi m14
Psi m14Psi m14
Psi m14
 
Postgresql tutorial
Postgresql tutorialPostgresql tutorial
Postgresql tutorial
 
Sharding Methods for MongoDB
Sharding Methods for MongoDBSharding Methods for MongoDB
Sharding Methods for MongoDB
 
Psi-mod-15
Psi-mod-15Psi-mod-15
Psi-mod-15
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
 
CORS - Enable Alfresco for CORS
CORS - Enable Alfresco for CORSCORS - Enable Alfresco for CORS
CORS - Enable Alfresco for CORS
 
06 Using More Package Concepts
06 Using More Package Concepts06 Using More Package Concepts
06 Using More Package Concepts
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Optimizing Alert Monitoring with Oracle Enterprise Manager
Optimizing Alert Monitoring with Oracle Enterprise ManagerOptimizing Alert Monitoring with Oracle Enterprise Manager
Optimizing Alert Monitoring with Oracle Enterprise Manager
 
Aula01-JavaScript
Aula01-JavaScriptAula01-JavaScript
Aula01-JavaScript
 
PowerShell
PowerShellPowerShell
PowerShell
 
How to Performance-Tune Apache Spark Applications in Large Clusters
How to Performance-Tune Apache Spark Applications in Large ClustersHow to Performance-Tune Apache Spark Applications in Large Clusters
How to Performance-Tune Apache Spark Applications in Large Clusters
 
PostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicações
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Apresentação HTML e CSS
Apresentação HTML e CSSApresentação HTML e CSS
Apresentação HTML e CSS
 
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 

Similaire à Criação de log de ações através do banco de dados PostgreSQL

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
 

Similaire à Criação de log de ações através do banco de dados PostgreSQL (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
 

Plus de Marcos Thomaz

Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...
Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...
Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...Marcos Thomaz
 
Hydros - Apresentação para Investidores
Hydros - Apresentação para InvestidoresHydros - Apresentação para Investidores
Hydros - Apresentação para InvestidoresMarcos Thomaz
 
Minimax e corte alfa beta
Minimax e corte alfa betaMinimax e corte alfa beta
Minimax e corte alfa betaMarcos Thomaz
 
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
 
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
 

Plus de Marcos Thomaz (9)

Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...
Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...
Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...
 
Hydros - Apresentação para Investidores
Hydros - Apresentação para InvestidoresHydros - Apresentação para Investidores
Hydros - Apresentação para Investidores
 
Minimax e corte alfa beta
Minimax e corte alfa betaMinimax e corte alfa beta
Minimax e corte alfa beta
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
 
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
 
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
 
Postgre sql +python
Postgre sql +pythonPostgre sql +python
Postgre sql +python
 
Postgresql +python
Postgresql +pythonPostgresql +python
Postgresql +python
 

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

  • 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