Я хотів би дозволити користувачеві PostgreSQL (супер) бути автентифікованим або методами аутентифікації "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 Мб даних кожна) і суто лише для читання. Вони скидаються та створюються заново щовечора за допомогою гарадольського суперпользователя. harold також є системним обліковим записом, тому "peer" чудово працює для безкористувацьких кронштейнів і т. д. Потім є веб-інтерфейс для доступу до баз даних: для цього використовується автентифікація md5 (користувач системи - веб-сервер, ім'я користувача pg, пароль і db-ім'я надаються відвідувачів). Тепер я хотів би дозволити користувачеві Harold увійти і через веб-інтерфейс. Це не вдається через налаштування "peer" для harold.
Поточне вирішення полягає в тому, щоб веб-інтерфейс підключався через TCP, використовуючи
# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
крім локальних записів у першому прикладі. Це працює, але я б краще скористатися локальними розетками і тут - для продуктивності та через відчуття кишки, що це здається правильним.
Чи можливо це? Чи є кращі шляхи вирішення для нас?