Kann ich die Peer- und MD5-Authentifizierung für denselben lokalen PostgreSQL-Benutzer in der Datei pg_hba.conf aktivieren?

14

Ich möchte, dass ein PostgreSQL-Benutzer (Super-Benutzer) entweder mit den Authentifizierungsmethoden "Peer" oder "md5" authentifiziert wird, wobei in beiden Fällen vorzugsweise lokale Unix-Domain-Sockets verwendet werden. Das Problem ist, dass die Reihenfolge der Einträge in pg_hba.conf wichtig ist und die erste Übereinstimmung angewendet wird.

Was ich habe:

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

Was ich möchte (ungültige Syntax):

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

Im Folgenden finden Sie einige Details zu der Umgebung, in der wir dies verwenden möchten:

Auf diesem speziellen Server sind alle Datenbanken relativ klein (jeweils <10 MB Daten) und rein schreibgeschützt. Sie werden jede Nacht vom Harold-Superuser gelöscht und neu erstellt. harold ist auch ein systemkonto, so dass "peer" gut für kennwortlose cronjobs usw. geeignet ist. Dann gibt es eine webschnittstelle, die auf die datenbanken zugreift: diese verwendet die md5-authentifizierung (systembenutzer ist der webserver, pg benutzername, kennwort und db name werden von bereitgestellt) die Besucher). Jetzt möchte ich den Harold-Benutzer auch über das Webinterface einloggen lassen. Dies schlägt aufgrund der Einstellung "Peer" für Harold fehl.

Die aktuelle Problemumgehung besteht darin, das Webinterface über TCP verbinden zu lassen

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

zusätzlich zu den lokalen Einträgen im ersten Beispiel. Das funktioniert, aber ich würde auch hier lieber lokale Sockets verwenden - für die Leistung und aufgrund des Bauchgefühls, dass es das Richtige zu sein scheint.

Ist das möglich? Gibt es bessere Workarounds für uns?

Zilk
quelle

Antworten:

10

Laut einer ähnlichen StackOverflow-Frage lautet die Antwort "Nein". Sie können nicht zwei Authentifizierungstypen für denselben Typ, dieselbe Datenbank, denselben Benutzer und dieselbe Adresse aktivieren.

In der StackOverflow-Frage wird empfohlen, eine .pgpassDatei im Basisverzeichnis des Benutzers und die md5-Authentifizierung zu verwenden, aber ich bin nicht sicher, ob dies für Cron-Jobs unbedingt funktionieren würde.

Nathan
quelle
Es funktioniert, wenn der Cronjob von demselben Benutzer stammt, der .pgpass in seinem Home-Verzeichnis hat.
Andrei Mikhaltsov