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?
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 Sudo
ing 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.
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"
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? :-)