Могу ли я включить аутентификацию peer и md5 для одного и того же локального пользователя PostgreSQL в pg_hba.conf?

14

Я хотел бы позволить пользователю 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

в дополнение к локальным записям в первом примере. Это работает, но я бы предпочел использовать здесь и локальные сокеты - для производительности и из-за интуитивного ощущения, что это кажется правильным.

Это возможно? Есть ли лучшие способы для нас?

Zilk
источник

Ответы:

10

В соответствии с аналогичным вопросом StackOverflow ответ - нет, вы не можете включить два типа аутентификации для одного типа: базы данных, пользователя и адреса.

В вопросе StackOverflow рекомендуется использовать .pgpassфайл в домашнем каталоге пользователя и использовать аутентификацию md5, но я не уверен, что это обязательно сработает для заданий cron.

Натан
источник
Это будет работать, если cronjob принадлежит тому же пользователю, у которого есть .pgpass в его домашнем каталоге.
Андрей Михальцов