.pgpass z postgreSQL nie działa

13

Umieściłem plik .pgpass w /folder/.pgpass i wygląda to tak

*:*:*:postgres:password_for_postgres

Mam skrypt bash, w którym wykonuję kopię zapasową bazy danych z postgreSQL:

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

Jednak skrypt nadal obiecuje mi hasło. O ile widzę, PGPASSFILE ma wartość tak, jak powinna. Wszelkie wskazówki na temat problemu?

/ K

Kerstin Viltersten
źródło

Odpowiedzi:

8

Czy plik pgpass jest ustawiony na tryb 0600 (tzn. Tylko do odczytu / zapisu przez właściciela)? Biblioteka klienta zignoruje ją, jeśli będzie czytelna dla grupy lub świata.

araqnid
źródło
5

W mojej konfiguracji ( Ubuntu 10.04.3i PostgreSQL 8.4) mogłem w końcu go uruchomić, gdy nazwa użytkownika, do której jestem zalogowany, jest taka sama jak ta, dla której próbuję uzyskać hasło z .pgpasspliku.

Zalogowałem się jako deployer, próbowałem użyć tego .pgpasspliku, aby uzyskać dostęp do bazy danych należącej do nazwy użytkownika appname, która nie ma odpowiednika użytkownika w systemie Unix. Nie mogłem .pgpasspracować, dopóki nie zacząłem deployeruzyskiwać dostępu do bazy danych jako użytkownik ...

Oto moja /home/deployer/.pgpasszawartość pliku:

*:*:*:deployer:password

Oto część tego /etc/postgresql/8.4/main/pg_hba.conf:

# 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 

Jak widać, wszystkie moje połączenia wymagają hasła ( md5).

Przy tej konfiguracji, zakładając, że mam bazę danych utworzoną za pomocą tego polecenia:

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

Jestem w stanie wykonać następującą operację bez podawania hasła:

deployer@ubuntu-server:~$ dropdb dbname

Gdy tylko zmienię nazwę .pgpassna .pgpass-no, będzie wymagało hasła.

BTW, nie zapominaj, że twój .pgpassplik musi mieć 0600uprawnienia:

deployer@ubuntu-server:~$ ls -la .pgpass
-rw------- 1 deployer staff 24 2012-01-06 17:29 .pgpass
Romain Champourlier
źródło
2
Możesz kontrolować użytkownika pg, aby łączył się jak za pomocą -Uflagi do dropdbicreatedb
Kevin Horn
0

1) Utwórz plik .pgpass z zawartością

host: 5432: somedb: someuser: somepass

2) ustaw uprawnienia za pomocą polecenia

sudo chmod 600 .pgpass

3) Ustaw właściciela pliku jako tego samego użytkownika, za pomocą którego się zalogowałeś:

sudo chown login_username: login_username .pgpass

4) Ustaw zmienną środowiskową PGPASSFILE:

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

Teraz sprawdź, łącząc się z bazą danych:

psql -h host -U someuser somedb

Nie będę pytał o hasło i zalogowałem się na postgresql.

Shrinivas
źródło