Czy mogę włączyć uwierzytelnianie równorzędne i md5 dla tego samego lokalnego użytkownika PostgreSQL w pg_hba.conf?

14

Chciałbym zezwolić (super) użytkownikowi PostgreSQL na uwierzytelnienie za pomocą metod uwierzytelniania „peer” lub „md5”, najlepiej w obu przypadkach za pomocą lokalnych gniazd domeny Unix. Problem polega na tym, że kolejność wpisów w pg_hba.conf ma znaczenie i zostanie zastosowane pierwsze dopasowanie.

Co ja mam:

# TYPE    DATABASE   USER      ADDRESS   METHOD
  local   all        harold              peer
  local   all        all                 md5

Co chciałbym (niepoprawna składnia):

# TYPE    DATABASE   USER      ADDRESS   METHOD
  local   all        harold              peer-or-md5
  local   all        all                 md5

Oto kilka szczegółowych informacji na temat środowiska, w którym chcielibyśmy to wykorzystać:

Na tym konkretnym serwerze wszystkie bazy danych są względnie małe (<10 MB danych) i są przeznaczone tylko do odczytu. Są upuszczane i odtwarzane co noc przez superużytkownika Harolda. harold jest także kontem systemowym, więc „peer” działa dobrze dla bezproblemowych cronjobs itp. Następnie istnieje interfejs sieciowy uzyskujący dostęp do baz danych: używa uwierzytelniania md5 (użytkownik systemu to serwer WWW, nazwa użytkownika pg, hasło i nazwa bazy danych są dostarczane przez odwiedzający). Teraz chciałbym, aby użytkownik Harold mógł zalogować się również przez interfejs WWW. Nie udaje się to z powodu ustawienia „peer” dla Harolda.

Obecnym obejściem jest zezwolenie interfejsowi WWW na połączenie za pomocą TCP przy użyciu

# TYPE    DATABASE   USER      ADDRESS        METHOD
  host    all        all       127.0.0.1/32   md5
  host    all        all       ::1/128        md5

oprócz lokalnych wpisów w pierwszym przykładzie. To działa, ale wolałbym również używać tutaj lokalnych gniazd - dla wydajności i z powodu przeczucia, że ​​wydaje się to właściwe.

czy to możliwe? Czy są dla nas jakieś lepsze obejścia?

Zilk
źródło

Odpowiedzi:

10

Zgodnie z podobnym pytaniem StackOverflow odpowiedź brzmi nie, nie można włączyć dwóch rodzajów uwierzytelniania dla tego samego typu, bazy danych, użytkownika i adresu.

Pytanie StackOverflow zaleca używanie .pgpasspliku z katalogu domowego użytkownika i uwierzytelnianie md5, ale nie jestem pewien, czy to zadziała w przypadku zadań cron.

Nathan
źródło
Będzie działać, jeśli cronjob pochodzi od tego samego użytkownika, który ma .pgpass w swoim katalogu domowym.
Andrei Mikhaltsov