Psql sem senha somente para root
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_bdUm abraço.
Leave a Reply