.pgpass з postgreSQL не працює


13

Я помістив .pgpass-файл у /folder/.pgpass, і він виглядає приблизно так

*:*:*:postgres:password_for_postgres

У мене є сценарій bash, де я створюю резервну копію бази даних з postgreSQL:

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

Однак сценарій все ще пропонує мені пароль. Наскільки я бачу, PGPASSFILE має значення як слід. Будь-які натяки на те, яка проблема може бути?

/ К

Відповіді:


8

Чи встановлений файл pgpass у режимі 0600 (тобто читання / запис лише власником)? Клієнтська бібліотека буде ігнорувати її, якщо вона читається на групі чи у всьому світі.


5

У моїй конфігурації ( Ubuntu 10.04.3і PostgreSQL 8.4) я, нарешті, можу змусити його працювати, коли ім’я користувача, на яке я ввійшов, таке ж, як і те, для якого я намагаюся отримати пароль із .pgpassфайлу.

Увійшовши як deployer, я намагався використати .pgpassфайл для доступу до бази даних, що належить імені користувача appname, у якого немає еквівалента користувача Unix. Я не міг зробити .pgpassроботу, поки не почав використовувати deployerяк користувача для доступу до моєї бази даних ...

Ось мій /home/deployer/.pgpassвміст файлу:

*:*:*:deployer:password

Ось частина /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 

Як бачите, для всіх моїх підключень потрібен пароль ( md5).

З цією конфігурацією, якщо я маю базу даних, яку я створив за допомогою цієї команди:

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

Я можу виконати таку операцію без введення пароля:

deployer@ubuntu-server:~$ dropdb dbname

Щойно я зміню ім'я свого .pgpassна .pgpass-no, воно вимагатиме пароля.

До речі, не забувайте, що ваш .pgpassфайл повинен мати 0600дозвіл:

deployer@ubuntu-server:~$ ls -la .pgpass
-rw------- 1 deployer staff 24 2012-01-06 17:29 .pgpass

2
Ви можете керувати користувачем pg для підключення, використовуючи -Uпрапор до dropdbтаcreatedb
Kevin Horn

0

1) Створіть .pgpass-файл із вмістом

хост: 5432: somedb: someuser: somepass

2) встановити дозволи за допомогою команди

sudo chmod 600 .pgpass

3) Встановіть власника файлу як того самого користувача, за допомогою якого ви ввійшли:

sudo chown login_username: login_username .pgpass

4) Встановити змінну середовища PGPASSFILE:

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

Тепер перевірте, підключившись до бази даних:

psql -h хост -U someuser somedb

Я не підкажу про введення пароля та увійдіть у postgresql.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.