Eu tenho um banco de dados PostgreSQL em funcionamento. Agora eu gostaria de automatizar algumas operações no meu banco de dados, mas tenho um problema com a senha.
Estou usando o seguinte script bash:
#!/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 bash, 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, parece que nenhum dos métodos funciona. Alguém tem alguma ideia? Estou esquecendo de fazer alguma coisa?
postgresql
ubuntu-12.04
Alibaba
fonte
fonte
sudo su -c psql postgres psql ...
vez disso..pgpass
está no seu diretório pessoal? Não está nopostgres
usuário?Respostas:
sudo
não retém a maioria das variáveis de ambiente. Se você deseja especificar variáveis de ambiente para um comando executadosudo
, faça o seguintesudo
:A
sudo
permissão ou não disso dependerá da política de segurança em vigor no seu site.Eu não recomendo essa abordagem, pois expõe a senha no histórico da linha de comando e na lista de processos. É muito melhor usar um
.pgpass
arquivo ou, de preferência, configurarpg_hba.conf
parapeer
autenticação delocal
conexões do usuáriopostgres
.Você pode usar um
.pgpass
arquivo, mas ele deve ser o.pgpass
do usuário que você estásudo
'ing para, não o usuário que você estásudo
ing partir ; precisaria estar~postgres/.pgpass
neste caso. Pense nisso:psql
em execução comopostgres
não sabe que ele correu atravéssudo
de sua conta, ele não sabe qual é a sua conta de usuário, e mesmo que o fizesse ele não tem permissão de leitura como o usuáriopostgres
a~youruser/.pgpass
.Além disso,
-w
é o mesmo que--no-password
. Não faz sentido especificar os dois.fonte
-E
opção que preservará seu ambiente (inclusivePGPASSWORD
). Isso evita que seja exibido na lista de processos.