Equilíbrio
Flexibilidade <ul><ul><li>Fácil de manter; </li></ul></ul><ul><ul><li>Fácil de portar/ migrar; </li></ul></ul><ul><ul><li>...
Desempenho <ul><ul><li>Transações/ Atualizações; </li></ul></ul><ul><ul><li>Conexões simultâneas; </li></ul></ul><ul><ul><...
Segurança <ul><ul><li>Evitar acesso não autorizado a informações confidenciais; </li></ul></ul><ul><ul><li>Evitar alteraçõ...
Leiam a Documentação Oficial <ul><ul><li>DBAs: Leiam tudo! </li></ul></ul><ul><ul><li>Sysadmins: ao menos “III - Server Ad...
Monitore sempre! <ul><ul><li>Configurando os logs do PostgreSQL você pode:  </li></ul></ul><ul><ul><ul><ul><li>Detectar ga...
Inteligência da Aplicação no Banco de Dados <ul><li>Vantagens: </li></ul><ul><ul><li>Maior controle por parte do DBA; </li...
<ul><li>Desvantagens: </li></ul><ul><ul><li>Menor controle por parte do desenvolvedor; </li></ul></ul><ul><ul><li>PL = Pro...
Inteligência da Aplicação no Banco de Dados <ul><li>Boas Práticas: </li></ul><ul><ul><li>Confie no PostgreSQL para reforça...
Modelagem <ul><ul><li>Estrutura de dados inteligentes e código burro trabalham muito melhor que ao contrário. (Eric Raimon...
Modelagem x Flexibilidade <ul><ul><li>Use domínios para melhorar a semântica dos dados; </li></ul></ul><ul><ul><li>Use seq...
Modelagem X Segurança <ul><ul><li>Use as restrições de integridade: PK, FK, NOT NULL, CHECK; </li></ul></ul><ul><ul><li>Us...
Modelagem X Desempenho <ul><ul><li>Evite desnormalizar o modelo de dados; </li></ul></ul><ul><ul><li>Separe o modelo físic...
SQL X Desempenho <ul><ul><li>Use funções para processar tarefas em lote; </li></ul></ul><ul><ul><li>Agregue várias consult...
SQL X Desempenho <ul><ul><li>Use índices em campos muito utilizados em cláusulas WHERE; </li></ul></ul><ul><ul><li>Evite u...
SQL X Segurança <ul><ul><li>Use o nome do esquema em operações DML e nomes explícitos para índices, restrições e seqüência...
SQL X Flexibilidade <ul><ul><li>Só utilize editores de texto puro; </li></ul></ul><ul><ul><li>Use o psql com a opção i </l...
O PostgreSQL é case sensitive! <ul><li>Ruim : </li></ul><ul><li>CREATE TABLE FUNCIONARIO ( </li></ul><ul><li>IDFUNCIONARIO...
USE MINÚSCULAS para nome de objetos <ul><li>Bom : </li></ul><ul><li>CREATE TABLE funcionario ( </li></ul><ul><li>id_funcio...
Explícito > Implícito <ul><li>Ótimo : </li></ul><ul><li>CREATE SEQUENCE  hr. funcionario_seq; </li></ul><ul><li>CREATE TAB...
Explícito > Implícito <ul><li>Excelente : </li></ul><ul><li>SET DEFAULT_TABLESPACE = tbs_rh_table; </li></ul><ul><li>CREAT...
Padrões <ul><ul><li>Aplicações independentes de SGDB não existem... </li></ul></ul><ul><ul><li>Use funções específicas do ...
Padrões <ul><ul><li>... mas a necessidade de fornecer soluções para mais de um SGDB existe! </li></ul></ul><ul><ul><li>Use...
Estruturas Lógicas e Físicas <ul><ul><li>Esquema : estrutura lógica onde os objetos são criados. Todo objeto é criado em u...
Um Esquema Por Aplicação <ul><li>PostgreSQL não acessa nativamente outros bancos de dados; </li></ul><ul><li>Crie um esque...
Dois tablespaces por aplicação <ul><li>Utilizar no  mínimo  um tablespace para índices e um para tabelas; </li></ul><ul><l...
Na Prática <ul><li>No bash do Linux: </li></ul><ul><li>#mkdir /postgresql </li></ul><ul><li>#chown postgres /postgresql </...
Na Prática <ul><li>No psql do PostgreSQL: </li></ul><ul><li>pgcon=#REVOKE ALL ON TABLESPACE pg_default,pg_global FROM publ...
Novos TABLESPACES? <ul><ul><li>Só faz sentido utilizar muitos tablespaces se você tem ou pretende ter vários discos! </li>...
Ambientes <ul><ul><li>Produção: utilizado por todos usuários da aplicação; </li></ul></ul><ul><ul><li>Homologação: aceite ...
Segurança <ul><ul><li>Use transações com BEGIN, COMMIT e ROLLBACK; </li></ul></ul><ul><ul><li>Use proteção efetiva contra ...
Segurança <ul><ul><li>Faça backup periódico do seu ambiente de produção e teste; </li></ul></ul><ul><ul><li>Teste todas ro...
Backup e Alta Disponibilidade <ul><ul><li>Backups: </li></ul></ul><ul><ul><ul><ul><li>Lógico (pg_dump) </li></ul></ul></ul...
Autenticando Aplicações no PostgreSQL <ul><ul><li>Autenticação Interna : um usuário do PostgreSQL por usuário da Aplicação...
Autenticação Interna <ul><ul><li>Auditoria consistente; </li></ul></ul><ul><ul><li>Uso de ROLEs para agrupar privilégios e...
Autenticação Externa <ul><ul><li>Tem as mesmas características da Autenticação Interna com as seguintes diferenças: </li><...
Autenticação pela Aplicação <ul><ul><li>Auditoria deve ser implementada pela aplicação; </li></ul></ul><ul><ul><li>Cadastr...
Autenticação – Boas Práticas <ul><ul><li>Aplicações web não corporativas com muitos usuários devem utilizar autenticação p...
pg_hba.conf <ul><ul><li>Sempre identifique o nome do banco de dados; </li></ul></ul><ul><ul><li>Utilize SSL para encriptar...
pg_hba.conf <ul><ul><li>Separe as regras por grupos (ROLES) de usuários: </li></ul></ul><ul><ul><ul><ul><li>DBAs; </li></u...
Vários ambientes no mesmo servidor? <ul><ul><li>Você tem que garantir a disponibilidade de recursos (Processador, Memória ...
Quando utilizar mais de um banco de dados no mesmo cluster? <ul><ul><li>Você quer aproveitar os processos do cluster exist...
Quando utilizar mais de um cluster no mesmo Sistema Operacional? <ul><ul><li>Você precisa utilizar um LC_COLLATE diferente...
Melhores Práticas <ul><li>Melhores práticas são diretrizes e não dogmas: </li></ul><ul><li>Uma pessoa  sem  bom senso não ...
OBRIGADO <ul><ul><li>Dúvidas, sugestões, correções, indignações e cervejas são bem vindas! </li></ul></ul><ul><ul><li>Fábi...
Upcoming SlideShare
Loading in...5
×

Fazendo Um Elefante Passar Debaixo da Porta - FISL

888

Published on

Palestra sobre melhores práticas em PostgreSQL realizada no FISL em abril de 2008

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
888
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
45
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Fazendo Um Elefante Passar Debaixo da Porta - FISL

  1. 2. Equilíbrio
  2. 3. Flexibilidade <ul><ul><li>Fácil de manter; </li></ul></ul><ul><ul><li>Fácil de portar/ migrar; </li></ul></ul><ul><ul><li>Fácil de entender; </li></ul></ul><ul><ul><li>Fácil de mudar; </li></ul></ul>
  3. 4. Desempenho <ul><ul><li>Transações/ Atualizações; </li></ul></ul><ul><ul><li>Conexões simultâneas; </li></ul></ul><ul><ul><li>Consultas complexas; </li></ul></ul><ul><ul><li>Carga e exportação de dados; </li></ul></ul><ul><ul><li>Suporte a grande volume de dados; </li></ul></ul>
  4. 5. Segurança <ul><ul><li>Evitar acesso não autorizado a informações confidenciais; </li></ul></ul><ul><ul><li>Evitar alterações indesejadas; </li></ul></ul><ul><ul><li>Evitar perda de dados; </li></ul></ul><ul><ul><li>Evitar indisponibilidade; </li></ul></ul><ul><ul><li>Recuperação rápida de desastres; </li></ul></ul>
  5. 6. Leiam a Documentação Oficial <ul><ul><li>DBAs: Leiam tudo! </li></ul></ul><ul><ul><li>Sysadmins: ao menos “III - Server Administration” </li></ul></ul><ul><ul><li>Desenvolvedores: Leiam ao menos as partes </li></ul></ul><ul><ul><ul><li>II - The SQL Language </li></ul></ul></ul><ul><ul><ul><li>IV – Client Interfaces </li></ul></ul></ul><ul><ul><ul><li>V – Server Programing </li></ul></ul></ul><ul><ul><li>http://www.postgresql.org/docs/manuals </li></ul></ul>
  6. 7. Monitore sempre! <ul><ul><li>Configurando os logs do PostgreSQL você pode: </li></ul></ul><ul><ul><ul><ul><li>Detectar gargalos de performance, erros nas aplicações, falhas de segurança, etc; </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Encontrar sugestões para melhorar a configuração do seu servidor; </li></ul></ul></ul></ul></ul><ul><ul><ul><li>Você pode configurar onde, quando, como e o que logar; </li></ul></ul></ul><ul><ul><ul><li>Vocâ ainda pode importar os logs para uma tabela dentro do seu banco de dados (Novo no 8.3). </li></ul></ul></ul>
  7. 8. Inteligência da Aplicação no Banco de Dados <ul><li>Vantagens: </li></ul><ul><ul><li>Maior controle por parte do DBA; </li></ul></ul><ul><ul><li>Maior velocidade em operações que envolvem um grande volume de dados e um número limitado de cálculos; </li></ul></ul><ul><ul><li>Acesso padronizado para diversas aplicações; </li></ul></ul><ul><ul><li>Facilidade de manutenção; </li></ul></ul><ul><ul><li>Baixa curva de aprendizado; </li></ul></ul>
  8. 9. <ul><li>Desvantagens: </li></ul><ul><ul><li>Menor controle por parte do desenvolvedor; </li></ul></ul><ul><ul><li>PL = Procedural Language, ou seja não é orientado a objeto; </li></ul></ul><ul><ul><li>Dificuldade em migrar aplicação para outros SGDBs; </li></ul></ul><ul><ul><li>Não existe COMMIT ou ROLLBACK dentro de uma função; </li></ul></ul><ul><ul><li>Código não pode ser ofuscado; </li></ul></ul><ul><ul><li>Alguns servidores de aplicação escalam processamento melhor que o PostgreSQL; </li></ul></ul><ul><ul><li>Concentração de carga de processamento no SGDB; </li></ul></ul>Inteligência da Aplicação no Banco de Dados
  9. 10. Inteligência da Aplicação no Banco de Dados <ul><li>Boas Práticas: </li></ul><ul><ul><li>Confie no PostgreSQL para reforçar restrições! </li></ul></ul><ul><ul><li>Utilize funções para cálculos em lote; </li></ul></ul><ul><ul><li>Utilize gatilhos para auditar tabelas chave; </li></ul></ul><ul><ul><li>Utilize funções e visões para aumentar a segurança no acesso a informações sensíveis; </li></ul></ul><ul><ul><li>Utilize gatilhos, funções e visões para integrar dados de diferentes aplicações; </li></ul></ul>
  10. 11. Modelagem <ul><ul><li>Estrutura de dados inteligentes e código burro trabalham muito melhor que ao contrário. (Eric Raimond) </li></ul></ul><ul><ul><li>A origem de todo mal está da otimização de performance precoce. (Leandro Dutra) </li></ul></ul><ul><ul><li>Problemas de performance quando causados por falhas na modelagem podem demorar anos para aparecer. Quando surgem são quase insolúveis. </li></ul></ul>
  11. 12. Modelagem x Flexibilidade <ul><ul><li>Use domínios para melhorar a semântica dos dados; </li></ul></ul><ul><ul><li>Use seqüências para gerar números únicos; </li></ul></ul><ul><ul><li>Use visões para tornar o modelo lógico mais simples que o modelo físico; </li></ul></ul><ul><ul><li>Documentar DDL, DER e Dicionário de Dados; </li></ul></ul>
  12. 13. Modelagem X Segurança <ul><ul><li>Use as restrições de integridade: PK, FK, NOT NULL, CHECK; </li></ul></ul><ul><ul><li>Use visões e funções para proteger o acesso a informações sensíveis. </li></ul></ul><ul><ul><li>Nunca crie campos e tabelas do tipo “FLEX”; </li></ul></ul><ul><ul><li>Documentar DDL, DER e Dicionário de Dados; </li></ul></ul>
  13. 14. Modelagem X Desempenho <ul><ul><li>Evite desnormalizar o modelo de dados; </li></ul></ul><ul><ul><li>Separe o modelo físico do modelo lógico </li></ul></ul><ul><ul><li>Nunca crie campos e tabelas do tipo “FLEX”; </li></ul></ul><ul><ul><li>Cuidado com FRAMEWORKs e GERADORES DE CÓDIGO; </li></ul></ul>
  14. 15. SQL X Desempenho <ul><ul><li>Use funções para processar tarefas em lote; </li></ul></ul><ul><ul><li>Agregue várias consultas pequenas em uma única consulta maior; </li></ul></ul><ul><ul><li>Use o PREPARE ... EXECUTE quando não for possível agregar várias transações pequenas e repetitivas; </li></ul></ul><ul><ul><li>Use poucas transações grandes no lugar de muitas transações pequenas; </li></ul></ul>
  15. 16. SQL X Desempenho <ul><ul><li>Use índices em campos muito utilizados em cláusulas WHERE; </li></ul></ul><ul><ul><li>Evite utilizar muitos índices em ambiente transacional pesado; </li></ul></ul><ul><ul><li>Evite operações pesadas de DELETE e UPDATE; </li></ul></ul><ul><ul><li>Evite o uso indiscriminado de gatilhos; </li></ul></ul><ul><ul><li>Evite usar funções quando SQL puro resolve; </li></ul></ul>
  16. 17. SQL X Segurança <ul><ul><li>Use o nome do esquema em operações DML e nomes explícitos para índices, restrições e seqüências em DDL ; </li></ul></ul><ul><ul><li>Evite realizar operações pesadas em ambiente gráfico; </li></ul></ul><ul><ul><li>Evite criar objetos em interfaces gráficas; </li></ul></ul><ul><ul><li>Antes de dizer que um SQL não funciona, teste sempre no psql; </li></ul></ul>
  17. 18. SQL X Flexibilidade <ul><ul><li>Só utilize editores de texto puro; </li></ul></ul><ul><ul><li>Use o psql com a opção i </li></ul></ul><ul><ul><li>Escreva palavras reservadas em letra maiúscula e nome de objetos em letra minúscula; </li></ul></ul><ul><ul><li>Use o nome do esquema em operações DML e nomes explícitos para índices, restrições e seqüências em DDL ; </li></ul></ul>
  18. 19. O PostgreSQL é case sensitive! <ul><li>Ruim : </li></ul><ul><li>CREATE TABLE FUNCIONARIO ( </li></ul><ul><li>IDFUNCIONARIO SERIAL PRIMARY KEY, </li></ul><ul><li>NOME VARCHAR(50) NOT NULL, </li></ul><ul><li>DEPTO INTEGER REFERENCES DEPTO(IDDEPTO)); </li></ul><ul><li>Péssimo : </li></ul><ul><li>Create Table Funcionario ( </li></ul><ul><li>IdFuncionario Serial Primary Key, </li></ul><ul><li>Nome Varchar(50) Not Null, </li></ul><ul><li>Depto Integer References Depto(IdDepto)); </li></ul>
  19. 20. USE MINÚSCULAS para nome de objetos <ul><li>Bom : </li></ul><ul><li>CREATE TABLE funcionario ( </li></ul><ul><li>id_funcionario SERIAL PRIMARY KEY, </li></ul><ul><li>nome VARCHAR(50) NOT NULL, </li></ul><ul><li>id_depto INTEGER REFERENCES depto(id_depto) </li></ul><ul><li>); </li></ul>
  20. 21. Explícito > Implícito <ul><li>Ótimo : </li></ul><ul><li>CREATE SEQUENCE hr. funcionario_seq; </li></ul><ul><li>CREATE TABLE hr. funcionario ( </li></ul><ul><li>id_funcionario INTEGER </li></ul><ul><li>DEFAULT NEXTVAL('hr.funcionario_seq'), </li></ul><ul><li>nome VARCHAR(50) NOT NULL, </li></ul><ul><li>depto INTEGER </li></ul><ul><li>CONSTRAINTS </li></ul><ul><li>funcionario_pk PRIMARY KEY (id_funcionario) </li></ul><ul><li>USING INDEX TABLESPACE tbs_rh_index, </li></ul><ul><li>funcionario_depto_fk FOREIGN KEY (id_depto) </li></ul><ul><li>REFERENCES rh .depto(id_depto) </li></ul><ul><li>) TABLESPACE tbs_rh_table; </li></ul>
  21. 22. Explícito > Implícito <ul><li>Excelente : </li></ul><ul><li>SET DEFAULT_TABLESPACE = tbs_rh_table; </li></ul><ul><li>CREATE SEQUENCE rh. funcionario_seq; </li></ul><ul><li>CREATE TABLE rh. funcionario ( </li></ul><ul><li>id_funcionario INTEGER </li></ul><ul><li>DEFAULT NEXTVAL(' rh .funcionario_seq'), </li></ul><ul><li>nome VARCHAR(50) NOT NULL, </li></ul><ul><li>depto INTEGER </li></ul><ul><li>); </li></ul><ul><li>SET DEFAULT_TABLESPACE = tbs_rh_index; </li></ul><ul><li>ALTER TABLE rh.funcionario ADD CONSTRAINT func_pk </li></ul><ul><li>PRIMARY KEY (id_funcionario) USING INDEX func_pk_ix; </li></ul><ul><li>ALTER TABLE rh.funcionario ADD CONSTRAINT func_depto_fk </li></ul><ul><li>FOREIGN KEY (id_depto) REFERENCES rh .depto(id_depto); </li></ul>
  22. 23. Padrões <ul><ul><li>Aplicações independentes de SGDB não existem... </li></ul></ul><ul><ul><li>Use funções específicas do PostgreSQL quando: </li></ul></ul><ul><ul><ul><ul><li>houver grande ganho de performance ou </li></ul></ul></ul></ul><ul><ul><ul><ul><li>esta função for chave para a sua aplicação; </li></ul></ul></ul></ul>
  23. 24. Padrões <ul><ul><li>... mas a necessidade de fornecer soluções para mais de um SGDB existe! </li></ul></ul><ul><ul><li>Use ao máximo o padrão ANSI/SQL; </li></ul></ul><ul><ul><li>Evite o uso de funções que não sejam em PL/pgSQL; </li></ul></ul><ul><ul><li>Evite o uso de funções exóticas que não tenham implementação similar em outro SGDB de mercado; </li></ul></ul>
  24. 25. Estruturas Lógicas e Físicas <ul><ul><li>Esquema : estrutura lógica onde os objetos são criados. Todo objeto é criado em um esquema; </li></ul></ul><ul><ul><li>Tablespace : local físico p/ armazenamento de tabelas e índices; </li></ul></ul><ul><ul><li>Banco de Dados : conjunto de esquemas e seus objetos. </li></ul></ul><ul><ul><li>Cluster (initdb): conjunto de arquivos que compõe uma única instância do PostgreSQL. Esta utiliza um único conjunto de processos, memória, porta de rede, mas pode conter vários bancos de dados; </li></ul></ul>
  25. 26. Um Esquema Por Aplicação <ul><li>PostgreSQL não acessa nativamente outros bancos de dados; </li></ul><ul><li>Crie um esquema para cada aplicação com seu próprio dono; </li></ul><ul><li>Utilize um esquema separado para auditoria de vários sistemas; </li></ul><ul><li>Utiliza um esquema separado para monitoramento do DBA; </li></ul><ul><li>Utilize o esquema public apenas para compartilhar dados entre diversas aplicações; </li></ul><ul><li>Não coloque objetos no information_schema , pg_catalog ou pg_toast . </li></ul>
  26. 27. Dois tablespaces por aplicação <ul><li>Utilizar no mínimo um tablespace para índices e um para tabelas; </li></ul><ul><li>Mais fácil identificar o espaço físico ocupado pela aplicação; </li></ul><ul><li>Mais fácil identificar arquivos de backup físico; </li></ul><ul><li>Mais fácil identificar uso e volume de índices ou tabelas; </li></ul><ul><li>Mais fácil fazer ajuste de I/O e desempenho; </li></ul><ul><li>Uma camada a mais de segurança na criação de objetos; </li></ul>
  27. 28. Na Prática <ul><li>No bash do Linux: </li></ul><ul><li>#mkdir /postgresql </li></ul><ul><li>#chown postgres /postgresql </li></ul><ul><li>#su postgres </li></ul><ul><li>$cd /postgresql </li></ul><ul><li>$mkdir /postgresql/tbs_hr_index </li></ul><ul><li>$mkdir /postgresql/tbs_hr_table </li></ul><ul><li>$psql pgcon </li></ul>
  28. 29. Na Prática <ul><li>No psql do PostgreSQL: </li></ul><ul><li>pgcon=#REVOKE ALL ON TABLESPACE pg_default,pg_global FROM public; </li></ul><ul><li>pgcon=#REVOKE ALL ON SCHEMA public FROM public; </li></ul><ul><li>pgcon=#CREATE ROLE hr NOLOGIN; </li></ul><ul><li>pgcon=#CREATE TABLESPACE hr_index OWNER hr LOCATION '/postgresql/tbs_hr_index'; </li></ul><ul><li>pgcon=#CREATE TABLESPACE hr_table OWNER hr LOCATION '/postgresql/tbs_hr_table'; </li></ul><ul><li>CREATE SCHEMA AUTHORIZATION hr; </li></ul>
  29. 30. Novos TABLESPACES? <ul><ul><li>Só faz sentido utilizar muitos tablespaces se você tem ou pretende ter vários discos! </li></ul></ul><ul><ul><li>Tablespace temporário em ambiente com muitas consultas pesadas (novo no 8.3!); </li></ul></ul><ul><ul><li>Separar dados históricos e partições de tabelas pouco utilizadas em discos mais baratos; </li></ul></ul><ul><ul><li>Tabelas e índices onde o desempenho é crítico (Usar RAID); </li></ul></ul><ul><ul><li>Tabelas onde a disponibilidade é crítica (Usar RAID); </li></ul></ul>
  30. 31. Ambientes <ul><ul><li>Produção: utilizado por todos usuários da aplicação; </li></ul></ul><ul><ul><li>Homologação: aceite de novas versões pelo usuário, testes de performance; </li></ul></ul><ul><ul><li>Teste: desenvolvimento de aplicações; </li></ul></ul><ul><ul><li>Laboratório: teste de novas versões, patches e funcionalidades do SGDB. </li></ul></ul>
  31. 32. Segurança <ul><ul><li>Use transações com BEGIN, COMMIT e ROLLBACK; </li></ul></ul><ul><ul><li>Use proteção efetiva contra SQL Injection na aplicação; </li></ul></ul><ul><ul><li>Use desconexão automática por ociosidade; </li></ul></ul><ul><ul><li>Use de tratamento de erros especial para erros de violação de restrições de integridade; </li></ul></ul><ul><ul><li>Nunca exiba mensagens de erro do banco na tela do usuário; </li></ul></ul><ul><ul><li>Nunca confie em conversões implícitas de tipo de dados; </li></ul></ul>
  32. 33. Segurança <ul><ul><li>Faça backup periódico do seu ambiente de produção e teste; </li></ul></ul><ul><ul><li>Teste todas rotinas de backup e restauração; </li></ul></ul><ul><ul><li>Nunca utilize TRUST ou PASSWORD como método de autenticação no pg_hba.conf; </li></ul></ul><ul><ul><li>Acompanhe os logs de erro; </li></ul></ul><ul><ul><li>Não utilize codificação de caracteres SQL_ASCII; </li></ul></ul><ul><ul><li>Durma!!! </li></ul></ul>
  33. 34. Backup e Alta Disponibilidade <ul><ul><li>Backups: </li></ul></ul><ul><ul><ul><ul><li>Lógico (pg_dump) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Físico – off line </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Físico – on line (via PITR) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Snapshot (via storage) </li></ul></ul></ul></ul><ul><ul><li>Alta disponibilidade: </li></ul></ul><ul><ul><ul><ul><li>Stand By (via PITR); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Replicação (via pg_pool, Slony, pg_cluster, etc) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Cluster (PL Proxy + pg_bouncer) </li></ul></ul></ul></ul>
  34. 35. Autenticando Aplicações no PostgreSQL <ul><ul><li>Autenticação Interna : um usuário do PostgreSQL por usuário da Aplicação; </li></ul></ul><ul><ul><li>Autenticação Externa : um usuário do PostgreSQL por usuário da Aplicação com autenticação externa (LDAP, AD, etc); </li></ul></ul><ul><ul><li>Autenticação via Aplicação : um usuário do PostgreSQL para todos usuários da aplicação; </li></ul></ul>
  35. 36. Autenticação Interna <ul><ul><li>Auditoria consistente; </li></ul></ul><ul><ul><li>Uso de ROLEs para agrupar privilégios em objetos; </li></ul></ul><ul><ul><li>DBA precisa criar usuários no banco de dados manualmente; </li></ul></ul><ul><ul><li>Aplicação deve trocar senha do usuário na primeira vez em que ele se conectar; </li></ul></ul><ul><ul><li>Um usuário e senha para várias aplicações; </li></ul></ul><ul><ul><li>Se a aplicação for Cliente/Servidor, PostgreSQL não consegue impedir o usuário de se conectar por fora da aplicação; </li></ul></ul>
  36. 37. Autenticação Externa <ul><ul><li>Tem as mesmas características da Autenticação Interna com as seguintes diferenças: </li></ul></ul><ul><ul><ul><ul><li>Administração de senhas fica a cargo do Administrador de Sistemas; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Se integra com os demais usuários da rede; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>É mais complexo para ser configurado; </li></ul></ul></ul></ul>
  37. 38. Autenticação pela Aplicação <ul><ul><li>Auditoria deve ser implementada pela aplicação; </li></ul></ul><ul><ul><li>Cadastro de usuários, senhas e permissões é de inteira responsabilidade da aplicação; </li></ul></ul><ul><ul><li>Senha de acesso ao PostgreSQL deve ficar dentro da aplicação; </li></ul></ul><ul><ul><li>O ROLE da aplicação nunca pode ser mesmo que o ROLE do desenvolvedor ou o dono dos objetos da aplicação; </li></ul></ul>
  38. 39. Autenticação – Boas Práticas <ul><ul><li>Aplicações web não corporativas com muitos usuários devem utilizar autenticação pela aplicação; </li></ul></ul><ul><ul><li>Aplicações que precisam de pool de conexões devem utilizar autenticação pela aplicação; </li></ul></ul><ul><ul><li>Aplicações corporativas com 3 ou mais camadas devem preferir devem preferir autenticação externa; </li></ul></ul><ul><ul><li>Mude o pg_hba.conf conforme o ambiente (produção, homologação, teste e laboratório) </li></ul></ul>
  39. 40. pg_hba.conf <ul><ul><li>Sempre identifique o nome do banco de dados; </li></ul></ul><ul><ul><li>Utilize SSL para encriptar o tráfego de informações pela rede. </li></ul></ul><ul><ul><li>Utilize 'ident' apenas para conexões locais; </li></ul></ul><ul><ul><li>Utilize MD5 para conexões remotas; </li></ul></ul><ul><ul><li>Limite a faixa de IPs ao máximo: </li></ul></ul><ul><ul><ul><ul><li>No caso aplicações em 3 ou mais camadas, limite aos IPs dos servidores de aplicação; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>No caso de aplicações Cliente/Servidor, limite a rede local que eles utilizam; </li></ul></ul></ul></ul>
  40. 41. pg_hba.conf <ul><ul><li>Separe as regras por grupos (ROLES) de usuários: </li></ul></ul><ul><ul><ul><ul><li>DBAs; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Desenvolvedores; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Aplicações (autenticação pela aplicação); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Aplicações (autenticação interna); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Aplicações (autenticação externa); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Usuários especiais; </li></ul></ul></ul></ul>
  41. 42. Vários ambientes no mesmo servidor? <ul><ul><li>Você tem que garantir a disponibilidade de recursos (Processador, Memória e Discos) para o servidor de produção; </li></ul></ul><ul><ul><li>Uma única consulta mal feita pode comprometer a performance de todos usuários; </li></ul></ul><ul><ul><li>Não é possível virtualizar os canais de I/O ; </li></ul></ul>
  42. 43. Quando utilizar mais de um banco de dados no mesmo cluster? <ul><ul><li>Você quer aproveitar os processos do cluster existente mas precisa comparar uma nova versão dos mesmos objetos; </li></ul></ul><ul><ul><li>Você tem aplicações que precisam utilizar diferentes codificações de caracteres; </li></ul></ul><ul><ul><li>NUNCA coloque um ambiente de teste e produção no mesmo cluster! </li></ul></ul>
  43. 44. Quando utilizar mais de um cluster no mesmo Sistema Operacional? <ul><ul><li>Você precisa utilizar um LC_COLLATE diferente; </li></ul></ul><ul><ul><li>Você precisa utilizar diferentes versões do PostgreSQL no mesmo servidor; </li></ul></ul><ul><ul><li>NUNCA coloque um ambiente de teste e produção no mesmo SO! </li></ul></ul>
  44. 45. Melhores Práticas <ul><li>Melhores práticas são diretrizes e não dogmas: </li></ul><ul><li>Uma pessoa sem bom senso não se preocupa com melhores práticas; </li></ul><ul><li>Uma pessoa com bom senso e pouca experiência procura aprender e utilizar as melhores práticas; </li></ul><ul><li>Uma pessoa com bom senso e muita experiência sabe quando não utilizar as melhores práticas; </li></ul>
  45. 46. OBRIGADO <ul><ul><li>Dúvidas, sugestões, correções, indignações e cervejas são bem vindas! </li></ul></ul><ul><ul><li>Fábio Telles Rodriguez, </li></ul></ul><ul><ul><li>SAVEPOINT: http://www.midstorm.org/~telles </li></ul></ul><ul><ul><li>e-mail: [email_address] </li></ul></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×