psql: fe_sendauth: nenhuma senha fornecida

11

Eu tenho um banco de dados PostgreSQL instalado e em execução. Agora gostaria de automatizar algumas operações no meu banco de dados, mas tenho um problema com a senha.

Estou usando o seguinte script:

#!/bin/bash
export PGPASSWORD="postgres"
sudo -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"

Quando executo o script, recebo o seguinte erro:

psql: fe_sendauth: no password supplied

Eu até tentei configurar o arquivo .pgpass no meu diretório pessoal, mas sem sucesso:

*:*:*:postgres:postgres

Eu executei o seguinte comando:

sudo chmod 0600 .pgpass

No entanto, não parece que algum dos métodos funcione. Alguém tem alguma ideia? Estou esquecendo de fazer alguma coisa?

    
por alibaba 25.07.2013 / 12:08

1 resposta

12

sudo não retém a maioria das variáveis de ambiente. Se você quiser especificar variáveis de ambiente para um comando executado em sudo , faça isso embora sudo :

sudo PGPASSWORD="postgres" -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"

O fato de sudo permitir ou não isso dependerá da política de segurança em vigor no seu site.

Eu não recomendo essa abordagem, pois ela expõe a senha no histórico da linha de comando e na lista de processos. É muito melhor usar um arquivo .pgpass ou, de preferência, configurar pg_hba.conf para peer autenticação de local conexões do usuário postgres .

Você pode usar um arquivo .pgpass , mas deve ser o .pgpass do usuário com quem você está sudo , e não o usuário que você está sudo ing de ; ele precisaria ser ~postgres/.pgpass neste caso. Pense nisso: psql executado como postgres não sabe que você o executou via sudo da sua conta, ele não sabe qual é a sua conta de usuário e, mesmo que tenha, não tem permissão de leitura como usuário postgres to ~youruser/.pgpass .

Além disso, -w é o mesmo que --no-password . Não faz sentido especificar ambos.

    
por 26.07.2013 / 02:24