web-dev-qa-db-fra.com

psql: fe_sendauth: aucun mot de passe fourni

J'ai une base de données PostgreSQL opérationnelle. Maintenant, je voudrais automatiser certaines opérations sur ma base de données mais j'ai un problème avec le mot de passe.

J'utilise le script bash suivant:

#!/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"

Lorsque j'exécute le script bash, j'obtiens l'erreur suivante:

psql: fe_sendauth: no password supplied

J'ai même essayé de configurer le fichier .pgpass dans mon répertoire personnel mais en vain:

*:*:*:postgres:postgres

J'ai exécuté la commande suivante:

Sudo chmod 0600 .pgpass

Néanmoins, il ne semble pas que l'une des méthodes fonctionne. Est-ce que quelqu'un a une idée? Suis-je en train d'oublier de faire quelque chose?

19
alibaba

Sudo ne conserve pas la plupart des variables d'environnement. Si vous souhaitez spécifier des variables d'environnement à une commande exécutée sous Sudo, faites-le si 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"

Que Sudo le permette ou non, cela dépendra de la politique de sécurité en vigueur sur votre site.

Je ne recommande pas cette approche car elle expose le mot de passe dans l'historique de la ligne de commande et dans la liste des processus. Il vaut mieux utiliser un .pgpass fichier, ou de préférence définir pg_hba.conf up pour peer authentification de local connexions depuis l'utilisateur postgres.

Vous pouvez utiliser un .pgpass fichier, mais ce doit être le .pgpass de l'utilisateur auquel vous êtes Sudo ', pas l'utilisateur auquel vous êtes Sudoing from; il faudrait que ce soit ~postgres/.pgpass dans ce cas. Pensez-y: psql fonctionnant en tant que postgres ne sait pas que vous l'avez exécuté via Sudo à partir de votre compte, il ne sait pas quel est votre compte utilisateur, et même si il l'a fait n'a pas l'autorisation de lecture en tant qu'utilisateur postgres à ~youruser/.pgpass.

Aditionellement, -w est le même que --no-password. Il est inutile de préciser les deux.

15
Craig Ringer

Cela se produit si le mot de passe de la base de données n'est pas donné.

default="postgres://postgres:[email protected]:5432/DBname"

0
Aishwarya kabadi

J'ai même essayé de configurer le fichier .pgpass dans mon répertoire personnel mais en vain:

Vous devez créer le fichier .pgpass dans le répertoire personnel du compte exécutant la commande psql, c'est-à-dire le compte postgres, pas le vôtre!

psql -d pg_ldap - w- sans mot de passe ...

Je pense que ces options peuvent également prêter à confusion.

Les deux signifient les mêmes choses, en particulier "n'utilisez pas un mot de passe".

Je suggère de les supprimer. psql reconnaîtra qu'un mot de passe est requis mais devrait détecter un fichier .pgpass correctement placé et l'utiliser au lieu de demander un mot de passe.

Et, bien sûr, le mot de passe de votre compte postgres n'est pas vraiment "postgres", n'est-ce pas? :-)

0
Phill W.