У меня есть то, что я считаю простым требованием аутентификации Postgres, но я не могу понять pg_hba.conf
заклинание, чтобы заставить его работать.
У меня есть пользователь (роль) базы данных с именем dbuser
который является владельцем защищенной паролем базы данных adb
. Существует соответствующий пользователь Unix с именем dbuser
. Пользователь Unix dbuser
должен иметь возможность подключиться к adb
без пароля все остальные пользователи Unix должны иметь возможность подключаться с помощью dbuser
роль и предоставление пароля базы данных. Т.е.
sudo -u dbuser psql -U dbuser adb
не должен требовать пароль базы данных, но
sudo -u any_other_user psql -U dbuser adb
должен потребовать пароль базы данных.
В pg_hba.conf
запись:
local adb dbuser peer
работает в первом случае, но не работает во втором (psql: FATAL: аутентификация однорангового узла не удалась для пользователя «dbuser»). Я понимаю почему, но не могу придумать правильных правил, чтобы делать то, что я хочу. Только сокеты Unix (локальные). Postgres 9.2, если это имеет значение.
То, что вы хотите, невозможно с текущей схемой аутентификации PostgreSQL. когда peer
проверка подлинности не выполняется, PostgreSQL не перейдет к следующей записи в pg_hba.conf
. Используется только первая запись, и в случае сбоя соединение отклоняется. В peer
режим не предлагает возможность возврата к аутентификации по паролю, если ID пользователя не совпадает.
Значит, ты не можешь этого сделать. Сожалею. Самое близкое, что вы можете сделать, это использовать local
(unix socket) соединения с peer
auth и требуя от других клиентов подключения через TCP / IP (host
) сокеты с md5
авт. Использование другого протокола позволяет выбрать для каждого свой метод аутентификации.
Недавно я предложил изменить поведение аутентификации в pgsql-hackers, которое может разрешить то, что вы хотите, в более поздней версии, если я смогу убедить людей, что это хорошая идея. В основном peer
режим займет md5_fallback
опция, позволяющая запрашивать пароль у клиента в случае неудачи peer
аутентификация.