Я хотел бы, чтобы пользователь PostgreSQL (супер) мог быть аутентифицирован с помощью методов аутентификации «одноранговый» или «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 МБ данных каждая) и предназначены только для чтения. Каждую ночь суперпользователь гарольд отбрасывает и воссоздает их. harold также является системной учетной записью, поэтому "peer" отлично работает для cronjobs без пароля и т. д. Затем есть веб-интерфейс для доступа к базам данных: он использует аутентификацию md5 (системный пользователь - это веб-сервер, имя пользователя pg, пароль и имя базы данных предоставляются посетители). Теперь я бы хотел, чтобы пользователь harold также входил в систему через веб-интерфейс. Это не удается из-за настройки «равноправный» для гарольда.
Текущий обходной путь - разрешить веб-интерфейсу подключаться через TCP, используя
# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
в дополнение к локальным записям в первом примере. Это работает, но я бы предпочел использовать здесь и локальные сокеты - для повышения производительности и из-за интуиции, что это кажется правильным.
Это возможно? Есть ли для нас лучшие обходные пути?
Согласно аналогичный вопрос StackOverflow, ответ - нет, вы не можете включить два типа аутентификации для одного и того же типа: базы данных, пользователя и адреса.
Вопрос StackOverflow рекомендует использовать .pgpass
файл в домашнем каталоге пользователя и с использованием аутентификации md5, но я не уверен, что это обязательно сработает для заданий cron.