.pgpass avec postgreSQL ne fonctionne pas

13

J'ai mis un fichier .pgpass dans /folder/.pgpass et il ressemble à ceci

*:*:*:postgres:password_for_postgres

J'ai un script bash où je sauvegarde la base de données à partir de postgreSQL:

#!/bin/bash
export PGPASSFILE=/folder/.pgpass
echo $PGPASSFILE
pg_dump --username=postgres --format=c --file=/backup/db/db.sqlc database

Cependant, le script me demande toujours le mot de passe. PGPASSFILE a la valeur comme il se doit, pour autant que je puisse voir. Avez-vous des indices sur le problème potentiel?

/ K

Kerstin Viltersten
la source

Réponses:

8

Le fichier pgpass est-il réglé sur le mode 0600 (c'est-à-dire en lecture / écriture uniquement par le propriétaire)? La bibliothèque cliente l'ignorera si elle est lisible en groupe ou dans le monde.

araqnid
la source
5

Sur ma configuration ( Ubuntu 10.04.3et PostgreSQL 8.4), je pourrais enfin le faire fonctionner lorsque le nom d'utilisateur auquel je suis connecté est le même que celui que j'essaie d'obtenir un mot de passe du.pgpass fichier.

Connecté en tant que deployer, j'essayais d'utiliser le .pgpassfichier pour accéder à la base de données appartenant à un nom d'utilisateur appname, qui n'a pas d'équivalent utilisateur Unix. Je ne pouvais pas faire le .pgpasstravail, jusqu'à ce que je commence à utiliserdeployer tant qu'utilisateur pour accéder à ma base de données ...

Voici /home/deployer/.pgpassle contenu de mon fichier:

*:*:*:deployer:password

Voici une partie de celle- /etc/postgresql/8.4/main/pg_hba.confci:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD                                                

# "local" is for Unix domain socket connections only                                                        
local   all         all                               md5                                                   
# IPv4 local connections:                                                                                   
host    all         all         127.0.0.1/32          md5                                                   
host    all         all         192.168.0.1/32        md5                                                   
# IPv6 local connections:                                                                                   
host    all         all         ::1/128               md5 

Comme vous pouvez le voir, toutes mes connexions nécessitent un mot de passe (md5 ).

Avec cette configuration, en supposant que j'ai une base de données que j'ai créée avec cette commande:

deployer@ubuntu-server:~$ createdb -T template0 -O deployer -E UTF8 dbname

Je peux effectuer l'opération suivante sans entrer de mot de passe:

deployer@ubuntu-server:~$ dropdb dbname

Dès que je change le nom de mon .pgpassà.pgpass-no , il faudra un mot de passe.

BTW, n'oubliez pas que votre .pgpassfichier doit être sous 0600autorisations:

deployer@ubuntu-server:~$ ls -la .pgpass
-rw------- 1 deployer staff 24 2012-01-06 17:29 .pgpass
Romain Champourlier
la source
2
Vous pouvez contrôler l'utilisateur pg pour se connecter en utilisant le -Udrapeau vers dropdbetcreatedb
Kevin Horn
0

1) Créez un fichier .pgpass avec du contenu

hôte: 5432: somedb: someuser: somepass

2) définissez les autorisations à l'aide de la commande

sudo chmod 600 .pgpass

3) Définissez le propriétaire du fichier comme le même utilisateur que celui avec lequel vous vous êtes connecté:

sudo chown login_username: login_username .pgpass

4) Définissez la variable d'environnement PGPASSFILE:

export PGPASSFILE = '/ home / user / .pgpass'

Vérifiez maintenant en vous connectant à la base de données:

psql -h hôte -U someuser somedb

Je ne demanderai pas de mot de passe et je me suis connecté à postgresql.

Shrinivas
la source