.pgpass mit postgreSQL funktioniert nicht

13

Ich habe eine .pgpass-Datei in /folder/.pgpass abgelegt und es sieht so aus

*:*:*:postgres:password_for_postgres

Ich habe ein Bash-Skript, mit dem ich die Datenbank von postgreSQL aus sichern kann:

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

Das Skript fordert mich jedoch weiterhin zur Eingabe des Kennworts auf. PGPASSFILE hat den Wert, wie es sollte, soweit ich sehen kann. Irgendwelche Hinweise, wo das Problem liegen könnte?

/ K

Kerstin Viltersten
quelle

Antworten:

8

Ist die pgpass-Datei auf den Modus 0600 eingestellt (dh nur vom Eigentümer lesen / schreiben)? Die Client-Bibliothek ignoriert es, wenn es gruppen- oder weltlesbar ist.

araqnid
quelle
5

In meiner Konfiguration ( Ubuntu 10.04.3und PostgreSQL 8.4) konnte ich es endlich zum Laufen bringen, wenn der Benutzername, für den ich angemeldet bin, mit dem übereinstimmt, für den ich ein Kennwort aus der .pgpassDatei abrufen möchte.

Angemeldet als deployerIch habe versucht, mithilfe der .pgpassDatei auf die Datenbank zuzugreifen, die einem Benutzernamen gehört appname, für den kein Unix-Benutzeräquivalent vorhanden ist. Ich konnte die .pgpassArbeit nicht machen , bis ich anfing, deployerals Benutzer auf meine Datenbank zuzugreifen ...

Hier ist mein /home/deployer/.pgpassDateiinhalt:

*:*:*:deployer:password

Hier ein Teil des /etc/postgresql/8.4/main/pg_hba.confeinen:

# 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 

Wie Sie sehen, sind für alle meine Verbindungen Kennwörter ( md5) erforderlich .

Bei dieser Konfiguration wird vorausgesetzt, dass ich eine Datenbank habe, die ich mit diesem Befehl erstellt habe:

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

Ich kann den folgenden Vorgang ausführen, ohne ein Kennwort einzugeben:

deployer@ubuntu-server:~$ dropdb dbname

Sobald ich den Namen meiner ändern .pgpasszu .pgpass-no, es wird ein Passwort benötigt.

Übrigens, vergessen Sie nicht, dass Ihre .pgpassDatei unter 0600Berechtigungen sein muss:

deployer@ubuntu-server:~$ ls -la .pgpass
-rw------- 1 deployer staff 24 2012-01-06 17:29 .pgpass
Romain Champourlier
quelle
2
Sie können den PG-Benutzer so steuern, dass er eine Verbindung herstellt, indem Sie die -UFlagge zu dropdbundcreatedb
Kevin Horn
0

1) Erstellen Sie eine .pgpass-Datei mit Inhalten

host: 5432: somedb: someuser: somepass

2) Legen Sie die Berechtigungen mit dem Befehl fest

sudo chmod 600 .pgpass

3) Legen Sie den Dateieigentümer als denselben Benutzer fest, mit dem Sie sich angemeldet haben:

sudo chown login_username: login_username .pgpass

4) Setzen Sie die Umgebungsvariable PGPASSFILE:

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

Überprüfen Sie nun, indem Sie eine Verbindung zur Datenbank herstellen:

psql -h host -U someuser somedb

Ich werde nicht zur Eingabe eines Passworts auffordern und mich bei postgresql anmelden.

Shrinivas
quelle