Ruby -> PostgreSQL соединение с pg_hba.conf, установленным в «идентичный пользователь» вместо «доверие» - PullRequest
0 голосов
/ 21 января 2012

Я пробовал каждый поисковый запрос Google, о котором только могу вспомнить, но все, что я выскакиваю, говорит о том, что для локальных подключений установлено значение trust в pg_hba.conf (похоже на дыру в безопасности, если кто-либо локально может войти и получить доступ к БДкак кто-либо, кто они говорят, что они).

В pg_hba.conf локальные соединения установлены на ident sameuser.Скрипт должен быть запущен от имени этого пользователя, но я получаю эту ошибку:

A database error occurred: 
fe_sendauth: no password supplied

Код Ruby довольно общий:

conn_str = "DBI:pg:dbname=mydb;host=" + localhost
@connection = DBI.connect(conn_str, "myuser", '')

Я могу обойти это, создав ~/.pgpass file как описано здесь , но я бы предпочел, чтобы пользователи могли входить в систему и получать доступ к серверу БД.

Любой, кто когда-либо мог заставить ident sameuser PostgreSQL работать должным образомдля локальных скриптов?

Ответы [ 2 ]

2 голосов
/ 23 января 2012

Я подозреваю, что это:

В pg_hba.conf локальные соединения установлены на идентичные пользователя.Сценарий должен быть запущен от имени этого пользователя, но я получаю эту ошибку [...]

conn_str = "DBI:pg:dbname=mydb;host=" + localhost
@connection = DBI.connect(conn_str, "myuser", '')

Обратите внимание, что "локальное" соединение не совпадает с соединением с "localhost",Как только вы упоминаете «localhost» в URL-адресе соединения, создается сокет TCP / IP.Они управляются правилами host в `pg_hba.conf.

Чтобы использовать реальное" локальное "соединение, необходимо использовать доменные сокеты Unix.Но я не знаю, поддерживает ли их соединитель Ruby DBI.

1 голос
/ 23 января 2012

Настройка идентификатора работает для пользователей локальной системы и PostgreSQL 8.4.Возможно, вам придется изменить настройки pg_hba.conf.

Проверьте файлы журнала базы данных, чтобы точно определить, откуда происходят соединения и соответствует ли имя пользователя системы имени роли базы данных.Для этого вам может потребоваться активировать log_connections в вашем postgresql.conf .

Руководство действительно хорошо справляется с объяснением методов аутентификации .

Если имя пользователя системы и роль базы данных не совпадают, вам придется использовать файл .pgpass.Но ваши пароли все еще должны быть в безопасности.Только системный пользователь postgres может его прочитать.Я цитирую руководство :

В системах Unix разрешения на .pgpass должны запрещать любой доступ к миру или группе;достигните этого командой chmod 0600 ~ / .pgpass.

...