Comment puis-je appeler psql pour qu'il ne demande pas de mot de passe ?
Voici ce que j'ai:
psql -Umyuser < myscript.sql
Cependant, je n'ai pas pu trouver l'argument qui transmet le mot de passe, et donc psql le demande toujours.
postgresql
psql
Axel Fontaine
la source
la source
Réponses:
Il existe plusieurs façons de s'authentifier auprès de PostgreSQL. Vous pouvez rechercher des alternatives à l'authentification par mot de passe sur https://www.postgresql.org/docs/current/static/client-authentication.html .
Pour répondre à votre question, il existe plusieurs façons 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
PGPASSWORD
variable d'environnement. Voir ces:Il n'y a pas d'option pour fournir le mot de passe comme argument de ligne de commande car ces informations sont souvent disponibles pour tous les utilisateurs, et donc non sécurisées. Cependant, dans les environnements Linux / Unix, vous pouvez fournir une variable d'environnement pour une seule commande comme celle-ci:
la source
la source
Vous pouvez ajouter cette ligne de commande au début de votre script:
la source
export PGPASSWORD=[password]
a fonctionné#!/bin/sh set PGPASSWORD = postgres psql -h 192.168.3.200 -U postgres incx_um << EOF DELETE FROM usrmgt.user_one_time_codes WHERE time < NOW() - INTERVAL '30 minute' EOF
PGPASSWORD=password
.Si vous avez l'intention d'avoir plusieurs hôtes / connexions à la base de données, le fichier ~ / .pgpass est la solution.
Pas:
vim ~/.pgpass
ou similaire. Saisissez vos informations dans le format suivant:hostname:port:database:username:password
N'ajoutez pas de guillemets autour de vos valeurs de champ. Vous pouvez également utiliser * comme caractère générique pour vos champs de port / base de données.chmod 0600 ~/.pgpass
pour qu'il ne soit pas ignoré silencieusement par psql.alias postygresy='psql --host hostname database_name -U username'
les valeurs doivent correspondre à celles que vous avez entrées dans le fichier ~ / .pgpass.. ~/.bashrc
ou similaire.Notez que si vous avez un jeu de variables d'exportation PGPASSWORD = '', il aura priorité sur le fichier.
la source
chmod 600
sur le fichier, sinon vouspsql
l'ignorerez silencieusement (selon les documents).C'est peut-être une vieille question, mais il existe une autre méthode que vous n'avez pas mentionnée. Il est possible de spécifier le mot de passe directement dans l'URI de connexion. La documentation peut être trouvée ici , ou ici .
Vous pouvez fournir votre nom d'utilisateur et votre mot de passe directement dans l'URI de connexion fourni à
psql
:la source
PGPASSWORD
Si vous rencontrez des problèmes sur Windows comme moi (j'utilise Windows 7 64 bits) et que
set PGPASSWORD=[Password]
cela ne fonctionne pas.Ensuite, comme l'a dit Kavaklioglu dans l'un des commentaires,
Vous devrez l'enregistrer en haut du fichier, ou avant toute utilisation, donc son ensemble avant d'être appelé.
Fonctionne certainement sur Windows :)
la source
export PGPASSWORD=[password]
ne fonctionne pas du tout en utilisant la ligne de commande (cmd.exe). Êtes-vous sûr de ne pas utiliser cygwin ou quelque chose de similaire?Vous devez créer un fichier de mots de passe: voir http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html pour plus d'informations.
la source
Étant donné les 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 le nettoyage avec le fichier ~ / .pgpass de l'utilisateur qui pourrait exister. Vous devez également vous assurer que le fichier dispose des autorisations 0600 ou moins.
Certains ont suggéré de tirer parti de bash pour raccourcir cela comme suit:
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érera une erreur comme celle-ci:
la source
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
la source
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:
Le double signe dollar (
$$
)/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
chmod
commande à la ligne 4 - tout comme l' erreur " pas un fichier ordinaire " qui pourrait être décrite, il y a aussi une erreur " autorisations " si cela n'est pas fait.À la ligne 7, vous n'aurez pas à utiliser le drapeau
-h
myserver ,-p
myport ou-U
jdoe si vous utilisez les valeurs par défaut ( localhost : 5432 ) et que vous n'avez qu'un seul utilisateur de base de données. Pour plusieurs utilisateurs (mais la connexion par défaut), remplacez cette ligne parN'oubliez pas de rendre le script exécutable avec
METTRE À JOUR:
J'ai suivi les conseils de RichVel et rendu le fichier illisible avant d'y mettre le mot de passe. Cela ferme un léger trou de sécurité. Merci!
la source
mktemp
pour créer un fichier temporaire au lieu de créer votre propre schéma de dénomination. Il crée un nouveau fichier temporaire (nommé quelque chose comme/tmp/tmp.ITXUNYgiNh
sous Linux et/var/folders/xx/7gws2yy91vn9_t2lb8jcr2gr0000gn/T/tmp.QmbVOQk4
sur MacOS X) et imprime son nom sur stdout.chmod 600
après avoir créé le fichier, mais avant d'y écrire le mot de passe. Tel qu'il est écrit, un script malveillant sur le serveur pourrait continuellement essayer de lire des fichiers de ce format et réussirait parfois à obtenir le mot de passe. De plus, si ce script est interrompu pour une raison quelconque, le fichier sera laissé sur le disque - l'écriture d'untrap
gestionnaire de shell résoudrait ce problème. Étant donné qu'il n'est pas trivial d'écrire un script sécurisé comme celui-ci, je recommande d'utiliser à laexport PGPASSWORD
place.PGPASSWORD
est obsolète en 9.3.Une alternative à l'utilisation de
PGPASSWORD
la variable d'environnement consiste à utiliser uneconninfo
chaîne conformément à la documentationla source
Vous pouvez trouver cela utile: Ligne de commande Windows PSQL: existe-t-il un moyen d'autoriser la connexion sans mot de passe?
la source
8 ans plus tard ...
Sur mon mac, je devais mettre une ligne dans le fichier
~/.pgpass
comme:Voir également:
https://www.postgresql.org/docs/current/libpq-pgpass.html
https://wiki.postgresql.org/wiki/Pgpass
la source
Je trouve, que 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 psql pour omettre l'invite de mot de passe.
la source
Utilisez -w dans la commande: psql -h localhost -p 5432 -U user -w
la source