Я хотел бы позволить пользователю PostgreSQL (super) проходить аутентификацию с использованием методов «peer» или «md5», предпочтительно с использованием локальных сокетов домена Unix в обоих случаях. Проблема в том, что порядок записей в pg_hba.conf имеет значение, и первое совпадение будет применено.
Что я имею:
# TYPE DATABASE USER ADDRESS METHOD
local all harold peer
local all all md5
Что бы я хотел (неверный синтаксис):
# TYPE DATABASE USER ADDRESS METHOD
local all harold peer-or-md5
local all all md5
Вот еще несколько подробностей об окружающей среде, в которой мы хотели бы использовать это:
На этом конкретном сервере все базы данных относительно малы (<10 МБ данных каждая) и предназначены только для чтения. Они сбрасываются и воссоздаются каждую ночь суперпользователем Гарольда. Гарольд также является системной учетной записью, так что «peer» прекрасно работает для cronjobs без пароля и т. д. Затем есть веб-интерфейс для доступа к базам данных: здесь используется аутентификация md5 (системный пользователь - это веб-сервер, имя пользователя pg, пароль и имя db предоставляются посетители). Теперь я бы хотел, чтобы пользователь гарольда также заходил через веб-интерфейс. Это терпит неудачу из-за настройки "пира" для гарольда.
Текущий обходной путь - позволить веб-интерфейсу подключаться через TCP, используя
# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
в дополнение к локальным записям в первом примере. Это работает, но я бы предпочел использовать здесь и локальные сокеты - для производительности и из-за интуитивного ощущения, что это кажется правильным.
Это возможно? Есть ли лучшие способы для нас?