Professional Documents
Culture Documents
Comeando do incio...
Observao: Apesar de os testes terem sido feitos em ambiente Linux, os comandos (ping, telnet, psql) e arquivos de configurao (postgresql.conf, pg_hba.conf) existem e funcionam tambm no Windows, Macintosh ou FreeBSD, no respectivo terminal. Antes de tudo, faamos alguns testes que respondem algumas perguntas.
Se este for o caso, resolva este problema de conexo e configurao de rede antes de continuar.
Este um problema que ocorre com 5 de cada 4 iniciantes neste banco de dados: a conexo nolocal! Bom, o fato que a configurao padro do PostgreSQL faz com que apenas conexes locais (via soquete UNIX) sejam permitidas. O primeiro passo alterar uma opo no arquivo de configuraes postgresql.conf:
Verso Original Mudar para 7.X e anteriores tcpip_socket = false tcpip_socket = true 8.X em diante listen_addresses = 'localhost' listen_addresses = '*' Aps salvar o arquivo, ser preciso reiniciar o SGBD (no basta apenas fazer um "reload"). Agora refaa o teste do "telnet". Ter que aceitar a conexo e aparecer este texto:
rodrigo@asgard:~$ telnet 10.15.23.15 5432 Trying 10.15.23.15... Connected to 10.15.23.15. Escape character is '^]'.
D um CTRL+C para sair. Se ainda no funcionar, ser preciso verificar se firewalls no esto impedindo a conexo entre o cliente e o servidor, na porta do PostgreSQL (padro: 5432). Resolva essa questo antes de continuar a leitura... Opa! Metade do servio est concluda! Agora, outro problema que atormenta quem est comeando, este erro ao tentar se conectar:
$ psql -h 10.15.23.15 correios rodrigo psql: FATAL: nenhuma entrada no pg_hba.conf para mquina "10.15.22.32", usurio "rodrigo", banco de dados "correios", SSL desabilitado
Sigamos a dica que o PostgreSQL nos d! Abra o seguinte arquivo de configurao: pg_hba.conf. Este arquivo controla: quais hosts tm permisso de conexo, como os clientes se autenticam, quais usurios do PostgreSQL podem ser usados e que bancos de dados eles podem acessar. Os registros podem ter uma das seguintes formas:
local host hostssl hostnossl DATABASE DATABASE DATABASE DATABASE USER USER USER USER METHOD [OPTION] CIDR-ADDRESS METHOD CIDR-ADDRESS METHOD CIDR-ADDRESS METHOD [OPTION] [OPTION] [OPTION]
Sendo assim, nestas entradas de permisses de acesso ao PostgreSQL, podemos alterar: tipo de conexo ("local", "host") banco de dados ("all": todos) usurio ("all": todos) endereo IP e mscara (estilo CIDR) mtodo ("reject", "trust", "password", "md5", "ident same user")
Importante: o arquivo lido de cima para baixo, e a primeira entrada que esteja de acordo com a requisio considerada. Isso um fato que s vezes confunde os administradores. Os campos podem ser separados por espaos ou tabulaes - tanto faz, funcionar de ambas as formas. Bom, para resolver o problema em questo, precisamos incluir a seguinte linha:
host correios rodrigo 10.15.22.32/32 md5
Desta vez, no ser preciso reiniciar o PostgreSQL. No Linux, podemos enviar um sinal do tipo HUP das seguintes maneiras:
$ /etc/init.d/postgresql-8.1 reload $ killall -HUP postmaster
No Windows eu vou ficar devendo, mas deve ser algo como "recarregar o servio". Pronto! Simples, no? Se voc quiser, pode fazer com que o PostgreSQL funcione de modo promscuo, adicionando a seguinte linha:
host all all 0.0.0.0/0 trust
Isso faz com que qualquer usurio, de qualquer IP acesse qualquer banco de dados, e sem necessidade de senha! Se, ao invs de "trust" for usado "reject", todo acesso ser fechado. Lembre-se que, pelo padro CIDR de endereamento, diversos IPs podem ser configurados com uma s linha! Por exemplo, ambas as linhas abaixo fazem com que toda a subrede do IP 10.15.22.32/22 tenha acesso, por senha, ao banco "correios":
host host correios correios all all 10.15.20.0/22 10.15.22.32 password 255.255.252.0 password
Uma coisa interessante restringir o acesso ao usurio "postgres", Senhor de Todo o Cluster, com a incluso da seguinte linha:
local all postgres ident sameuser
Com isso, somente acesso local (via "ssh" e instruo "su - postgres") poder ser feita com este super usurio, que tem permisso para fazer o que quiser em qualquer banco de dados.