web-dev-qa-db-fra.com

Ligne de commande Windows PSQL: existe-t-il un moyen d'autoriser une connexion sans mot de passe?

Mon objectif est de pouvoir lancer une commande sans être obligé de saisir mon mot de passe. Est-il possible d’y parvenir à partir de la ligne de commande Windows? Sous Linux, j’ai l’impression que je pourrais envoyer le mot de passe en mode standard ou quelque chose du genre, mais je ne suis pas sûr de pouvoir le faire pour Windows.

Merci!

18
A Question Asker

Il y a deux manières:

  • Définissez la variable d’environnement PGPASSWORD, par ex. set PGPASSWORD=yoursecretpassword
  • Utilisez le fichier mot de passe %APPDATA%\postgresql\pgpass.conf comme décrit dans documentation

Dans le fichier de mot de passe (mon emplacement est C:\Utilisateurs\Grzesiek\AppData\Roaming\postgresql\pgpass.conf), à utiliser au format doc. Par exemple, pour connecter une base de données postgres en tant que rôle postgres sur un serveur 5432 local, ajoutez:

localhost:5432:postgres:postgres:12345

J'ai vérifié cela et cela fonctionne bien (pour moi), mais n'utilisez pas 127.0.0.1).

20

Une autre option pratique (en particulier si votre serveur PG s'exécute sur votre propre ordinateur client et si cela ne pose aucun problème de sécurité pour vous) est d'autoriser la connexion sans mot de passe sur le serveur (mode d'authentification "confiance"). 

Par exemple, cette ligne dans pg_hba.conf (dans votre répertoire DATA, un emplacement typique: C:\Program Files\PostgreSQL\9.0\data\) autorise l'accès sans mot de passe à partir de votre ordinateur local.

Host     all     all     127.0.0.1/32    trust

Ensuite, connectez-vous avec 

  psql.exe -h 127.0.0.1 -U postgres -w [YOUR_DB_NAME]
12
leonbloy

Je sais que c’est une vieille question, mais il est difficile de trouver une solution pour Windows. collez-le dans un fichier .bat et cela fonctionnera (du moins pour moi, cela a été le cas). remplacez director par le répertoire postres, définissez la variable d'environnement PHPASSWORD commande d'exécution en copie dans un fichier csv, puis effacez la variable d'environnement, puis revenez au répertoire racine.

cd C:\Program Files\PostgreSQL\9.5\bin\

set PGPASSWORD=yourpassword


psql -d databasename -U yourusername -w -c "\COPY (select * from yourtable) TO 'c:/Users/yourdirectory/yourcsvfilename.csv' DELIMITER '|' CSV HEADER;"

set PGPASSWORD=

cd c:\
1
klmbear

J'ai trouvé une autre solution utile qui a fonctionné pour moi sur ce lien . Il définit fondamentalement la PGPASSWORD au début de votre commande comme ceci:

PGPASSWORD=PASSWORD psql YOUR_CODE
0

Pas:

First ENvironment Var PGPASSWORD

C:\Windows\system32> set PGPASSWORD = clave

avant

psql -d basededatos -U usuario

Prêt,

0
JAGJ jdfoxito

Je me rends bien compte que cette question est un peu ancienne à l’heure actuelle, mais j’estime qu’il existe un meilleur moyen d’ouverture de session PostgreSQL sûre et sans mot de passe sous Windows - SSPI .

  1. Créez un compte d'utilisateur local ou de domaine et une connexion PostgreSQL avec le même nom. 

  2. Dans pg_ident.conf, créez un mappage:

    # MAPNAME   SYSTEM-USERNAME      PG-USERNAME
    SSPI        username@AUTHORITY   loginname
    

    Remplacez nom_utilisateur par le nom d'utilisateur Windows (il s'agit de l'attribut sAMAccountName pour les comptes de domaine) et remplacez AUTORITÉ par le nom d'ordinateur ou le nom de domaine abrégé. Si vous ne savez pas quoi utiliser pour AUTORITÉ, consultez le fichier journal PostgreSQL. Pour un compte local, il s'agira du nom de l'ordinateur. pour un compte de domaine, c'est probablement le nom de domaine court. Enfin, remplacez loginname par le nom de connexion PostgreSQL (pour éviter toute confusion, je vous recommande d'utiliser le même nom pour username et loginname).

  3. Dans pg_hba.conf, autorisez la connexion; par exemple.:

    # TYPE   DATABASE   USER        ADDRESS        METHOD
    Host     all        loginname   127.0.0.1/32   sspi map=SSPI
    Host     all        loginname   ::1/128        sspi map=SSPI
    
  4. Si un compte de domaine, définissez un SPN pour celui-ci; par exemple.:

    setspn -S POSTGRES/serverfqdn username
    

Vous pouvez maintenant vous connecter à Windows en utilisant le nom d'utilisateur spécifié et exécuter psql.exe, etc. sans avoir besoin d'un mot de passe.

0
Bill_Stewart