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?
postgresql
ubuntu-12.04
alibaba
la source
la source
sudo su -c psql postgres psql ...
plutôt..pgpass
est dans votre répertoire personnel? Pas dans celui de l'postgres
utilisateur?Réponses:
sudo
ne conserve pas la plupart des variables d'environnement. Si vous souhaitez spécifier des variables d'environnement pour une commande exécutée soussudo
, faites-le cependantsudo
:Que cela soit autorisé ou non
sudo
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 est préférable d'utiliser un
.pgpass
fichier, ou de préférence configurépg_hba.conf
pour l'peer
authentification deslocal
connexions de l'utilisateurpostgres
.Vous pouvez utiliser un
.pgpass
fichier, mais il doit être.pgpass
de l'utilisateur que vous êtessudo
« ING, et non l'utilisateur dont voussudo
ING à partir ; il faudrait que ce soit~postgres/.pgpass
dans ce cas. Pensez-y: enpsql
cours d' exécution commepostgres
ne le savez - vous couru par passudo
de votre compte, il ne sait pas ce que votre compte utilisateur est, et même si elle l'a fait il n'a pas l' autorisation de lecture en tant qu'utilisateurpostgres
à~youruser/.pgpass
.En outre,
-w
est identique à--no-password
. Il est inutile de préciser les deux.la source
-E
option qui préservera votre environnement (y comprisPGPASSWORD
). Cela l'empêche de s'afficher dans la liste des processus.