Comment puis-je appeler psql pour qu’il ne demande pas de mot de passe ?
C’est ce que j’ai:
psql -Umyuser < myscript.sql
Cependant, je n’ai pas trouvé l’argument qui transmet le mot de passe, et donc psql le demande toujours.
Il existe plusieurs façons de vous authentifier auprès de PostgreSQL. Vous souhaiterez peut-être rechercher des alternatives à l’authentification par mot de passe à l’ adresse https://www.postgresql.org/docs/current/static/client-authentication.html .
Pour répondre à votre question, il existe plusieurs moyens de fournir un mot de passe pour l’authentification par mot de passe. La manière évidente est via l’invite de mot de passe. Au lieu de cela, vous pouvez fournir le mot de passe dans un fichier pgpass ou via la variable d’environnement PGPASSWORD
. Voir ces:
Il n’y a pas d’option pour fournir le mot de passe en tant qu’argument de ligne de commande car cette information est souvent disponible pour tous les utilisateurs, et donc non sécurisée. Cependant, dans les environnements Linux / Unix, vous pouvez fournir une variable d’environnement pour une seule commande comme celle-ci:
PGPASSWORD=yourpass psql ...
PGPASSWORD=[your password] psql -Umyuser < myscript.sql
Vous pouvez append cette ligne de commande au début de votre script:
set PGPASSWORD=[your password]
Si vous avez l’intention d’avoir plusieurs connexions hôte / firebase database, le fichier ~ / .pgpass est la voie à suivre.
Pas:
alias postygresy='psql --host hostname database_name -U username'
Les valeurs doivent correspondre à celles que vous avez entrées dans le fichier ~ / .pgpass. Notez que si vous avez une variable d’exportation PGPASSWORD = ”, celle-ci aura la priorité sur le fichier. Il est également sage de modifier les permissions de votre fichier afin que le contenu soit masqué par les autres utilisateurs. Cela peut être réalisé avec chmod 600 ~/.pgpass
Vous devez créer un fichier de mot de passe: voir http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html pour plus d’informations.
Si vous rencontrez des problèmes avec Windows comme moi (j’utilise Windows 7 64 bits) et que vous set PGPASSWORD=[Password]
ne fonctionne pas.
Ensuite, comme l’a dit Kavaklioglu dans l’un des commentaires,
export PGPASSWORD=[password]
Vous devrez l’enregistrer en haut du fichier, ou avant toute utilisation, avant de l’appeler.
Cela fonctionne certainement sur Windows 🙂
Compte tenu des problèmes de sécurité liés à l’utilisation de la variable d’environnement PGPASSWORD, je pense que la meilleure solution globale est la suivante:
Il y a quelques points à noter ici. L’étape 1 est là pour éviter de supprimer le fichier ~ / .pgpass de l’utilisateur qui pourrait exister. Vous devez également vous assurer que le fichier dispose des permissions 0600 ou moins.
Certains ont suggéré de tirer parti de bash comme suit:
PGPASSFILE=<(echo myserver:5432:mydb:jdoe:password) psql -h myserver -U jdoe -p 5432 mydb
Cela utilise la syntaxe <() pour éviter d'avoir à écrire les données dans un fichier réel. Mais cela ne fonctionne pas car psql vérifie quel fichier est utilisé et génère une erreur comme celle-ci:
WARNING: password file "/dev/fd/63" is not a plain file
En s’appuyant sur la réponse de mightybyte pour ceux qui ne sont pas à l’aise avec les scripts shell * nix , voici un script de travail:
#!/bin/sh PGPASSFILE=/tmp/pgpasswd$$ echo "myserver:5432:mydb:jdoe:password" > $PGPASSFILE chmod 600 $PGPASSFILE export PGPASSFILE psql mydb rm $PGPASSFILE
Le signe double dollar ( $$
) dans /tmp/pgpasswd$$
à la ligne 2 ajoute le numéro d’identification du processus au nom du fichier, afin que ce script puisse être exécuté plusieurs fois, même simultanément, sans effets secondaires.
Notez l’utilisation de la commande chmod
à la ligne 4 – tout comme l’erreur ” not a plain file ” décrite par mightybyte , il y a également une erreur ” permissions ” si cela n’est pas fait.
À la ligne 6, vous n’aurez pas à utiliser le -h
myserver , -p
myport ou -U
jdoe si vous utilisez les valeurs par défaut ( localhost : 5432 ) et que vous ne disposez que d’un utilisateur de firebase database. Pour plusieurs utilisateurs, (mais la connexion par défaut) changez cette ligne en
psql mydb jdoe
N’oubliez pas de rendre le script exécutable avec
chmod +x runpsql
( ou ce que vous avez appelé le fichier script )
Cela peut être fait simplement en utilisant PGPASSWORD. J’utilise psql 9.5.10. Dans votre cas, la solution serait
PGPASSWORD=password psql -U myuser < myscript.sql
Vous trouverez peut-être cela utile: Ligne de commande Windows PSQL: existe-t-il un moyen d’autoriser la connexion sans mot de passe?
Je trouve que ce psql affiche l’invite de mot de passe même si vous définissez la variable PGPASSWORD, mais vous pouvez spécifier l’option -w pour que psql omette l’invite de mot de passe.
Utilisez -w dans la commande: psql -h localhost -p 5432 -U utilisateur -w