Psql sem senha somente para root

junho 26, 2009

Me surgiu uma necessidade de um script que rode através do Crontab e faça inserções no banco de dados usando o comando COPY (grande volume de dados), isso só pode ser feito através do Psql. Mas como fazer para não pedir senha e manter o sistema seguro? Então eu, junto com o Everton, meu colega de Celepar, pesquisamos e encontramos à seguinte solução.

Softwares utilizados:

Sistema Operacional: Ubuntu 9.04
Versão do PostgreSQL: 8.3

Primeiramente, abra um terminal como root. Depois entre no diretório onde se encontram os arquivos de configuração do Postgres:

cd /etc/postgresql/8.3/main/

Agora vamos editar o arquivo pg_ident.conf, para criarmos um mapeamento entre o usuário da máquina (root) e o usuário do BD (Ex: coletor):

vi pg_ident.conf
# No map names are defined in the default configuration.  If all ident
# user names and PostgreSQL user names are the same, you don't need
# this file.  Instead, use the special map name "sameuser" in
# pg_hba.conf.
 
# MAPNAME     IDENT-USERNAME    PG-USERNAME
nopasswd	root		 coletor

Salve e feche o arquivo, agora vamos adicionar a regra para que o psql não solicite senha para o usuário coletor, quando estivermos logados como root. Abra e edite o arquivo pg_hba.conf, como abaixo.

vi pg_hba.conf
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
 
local	all		postgres		ident sameuser
local	all		coletor			ident nopasswd
# "local" is for Unix domain socket connections only
#local   all         all                               ident sameuser
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
#host    all         all         ::1/128               md5

A primeira linha deste arquivo significa que se você fizer um psql para o usuário postgres, será feita uma verificação da identidade da requisição, através do mapeamento padrão sameuser. Na segunda linha, inserimos a nossa regra, ou seja, requisições para o usuário coletor, serão verificadas com o mapeamento nopasswd, que é o nosso mapeamento. As demais linhas não nos interessam no momento. Salve e feche o arquivo.

Agora para funcionar, devemos reiniciar o serviço do Postgres.

/etc/init.d/postgresql-8.3 restart

Pronto, agora é só testar. Mas atenção!!!! No comando psql não se esqueça de indicar o nome do usuário e o banco de dados.

psql -U coletor meu_bd

Um abraço.

Leave a Reply