Проблема аутентификации с использованием PostgreSQL dblink

Как создать соединение dblink в Postgres без указания имени пользователя и пароля (по соображениям безопасности)?

Выполнение следующего запроса возвращает эту ошибку:

SELECT dblink_connect('conn_1','dbname=adatabase');

"could not establish connection 08001"

В моем файле pgpass.conf есть следующая запись, и я запускаю скрипт от имени пользователя postgres в pgAdmin:

localhost:5432:*:postgres:apassword

Использование dblink_connect_u также возвращает ту же ошибку.

Я использую Postgres 9.2 на сервере Windows 2012.


person minus34    schedule 14.04.2014    source источник


Ответы (2)


Если вы подключаетесь к базе данных PostgreSQL, вы можете изменить ваш pg_hba.conf на сервере, к которому вы подключаетесь, чтобы (например) для вашего пользователя были разрешены подключения без пароля с локального компьютера:

local   all   youruser                  trust
host    all   youruser   127.0.0.1/32   trust
host    all   youruser   ::1/128        trust

В идеале вы должны создать пользователя PostgreSQL на сервере специально для dblink и предоставить только необходимые права (например, только SELECT для определенных таблиц).

person Dave Gray    schedule 14.04.2014
comment
Добавление строки доверия IPv6 в pg_hba.conf помогло, хотя я не уверен, почему. Я запускаю тестовый скрипт на самом сервере (т.е. клиент и сервер — это одна и та же машина), что может объяснить это. - person minus34; 16.04.2014

Сервер использует свой файл pgpass, а не "ваш", который ему недоступен.

Рассмотрим этот отрывок из документации dblink_connect_u:

Кроме того, даже если удаленный сервер требует пароль, он может быть предоставлен серверной средой, например файлом ~/.pgpass, принадлежащим пользователю сервера.

В unix это будет ~postgres/.pgpass, в Windows вы должны найти эквивалентное расположение в зависимости от пользователя ОС, запускающего процессы сервера (либо postgres, либо системная учетная запись, в зависимости от вашего установщика).

В случае, если у пользователя ОС нет домашнего каталога или нет смысла помещать туда pgpass.conf, вы можете указать другое местоположение через PGPASSFILE переменная среды. Однако я не могу сказать, как администратор Windows устанавливает переменную среды для конкретной службы.

person Daniel Vérité    schedule 14.04.2014
comment
Хороший момент, чтобы помнить. Я должен был упомянуть, что запускаю тестовый скрипт с самого сервера! - person minus34; 16.04.2014