Назад | Перейти на главную страницу

Разрешить одноранговую аутентификацию без пароля при совпадении, но требовать пароль для других пользователей

У меня есть то, что я считаю простым требованием аутентификации 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 аутентификация.