Windows-Authentifizierung mit PostgreSQL

Der folgende Artikel beschreibt die die notwendigen Schritte, um sich an einem PostgreSQL-Datenbankserver per Windows-Authentifizierung anmelden zu können.

Voraussetzungen

Für die Windows-Authentifizierung benötigen Sie eine Domänenumgebung.

Vorgehensweise

Hinweis: Die nachfolgenden Schritte werden anhand der PostgreSQL-Version 13 beschrieben, berücksichtigen Sie dies u. a. bei Pfadangaben, wenn Sie eine andere PostgreSQL-Version einsetzen.

  1. Es muss ein Benutzer in der Domäne vorhanden oder neu angelegt werden, über den sich später der PostgreSQL-Dienst anmelden kann.

  2. Der Besitzer des Ordners C:\Program Files\PostgreSQL\13\data sowie aller Unterelemente, muss auf den Benutzer aus Schritt 1 geändert werden und anschließend volle Zugriffsrechte erhalten.

  3. Beenden Sie zunächst den PostgreSQL-Dienst postgresql-x64-13 - PostgreSQL Server 13. Ändern Sie nun die Anmeldedaten per Rechtsklick > Eigenschaften auf den Dienst im Reiter Anmelden auf den neuen Benutzer. Starten Sie den Dienst anschließend wieder.

    image

  4. Anschließend müssen Sie dem ActiveDirectory “mitteilen”, dass die Datenbank von dem neu angelegten Benutzer verwaltet wird, indem Sie dem Benutzer einen Dienstprinzipalnamen (SPN - Service Principal Name) hinzufügen. Führen Sie dazu in der Windows-Eingabeaufforderung folgenden Befehl aus:

    setspn -S POSTGRES/[fully.qualified.domain.name/Absolute.Domänenadresse] DOMAIN\[service_account_name/DomänenDienstBenutzer]

    Alternativ kann dieser Schritt auch direkt in der Microsoft Management Konsolen-Erweiterung Benutzer und Computer oder anderen Tools durchgeführt werden, die das ActiveDirectory bzw. die Eigenschaft servicePrincipalName des Benutzers ändern können.

  5. Nun müssen Sie im PostgreSQL-Administrationstool pgAdmin eine Login-Rolle für denjenigen Domänenbenutzer anlegen, der sich später im combit Report Server per Windows-Authentifizierung einloggen können soll. Wählen Sie hierzu im Objektbrowser Rechtsklick > Anmeldungs-/Gruppenrollen > Erstellen > Anmeldungs-/Gruppenrolle....

    image

    Beachten Sie bitte, dass der Login-Name exakt dem Name des Domänenbenutzers entsprechen muss (ein Workaround wird im Kapitel Zusätzliche Information: Benutzernamenzuordnung beschrieben) und dass die Login-Rolle volle Rollenprivilegien benötigt, damit alle Funktionen des combit Report Server korrekt ausgeführt werden können.

  6. In der Datei C:\Program Files\PostgreSQL\13\data\pg_hba.conf muss nun noch die Anmeldemethode für den in Schritt 5 genannten Benutzer auf den Wert sspi geändert bzw. neu eingetragen werden.

    TYPE DATABASE USER ADDRESS METHOD
    host all Domänenbenutzer/Login-Rolle 127.0.0.1/32 sspi

    Wenn Sie die Windows-Authentifizierung für alle Benutzer nutzen möchten, kann unter USER auch
    der Wert all eingetragen werden.

  7. Nun können Sie die Windows-Authentifizierung als Anmeldeart im combit Report Server auswählen.

Für weiterführende Informationen zu auftretenden Verbindungsproblemen finden Sie Protokolldateien im Verzeichnis C:\Program Files\PostgreSQL\13\data\log.

Zusätzliche Information: Benutzernamenzuordnung

Unter Umständen kann es gewünscht sein, dass Domänenbenutzer und PostgreSQL-Login-Name nicht übereinstimmen. Da PostgreSQL bei der Anmeldung per Windows-Authentifizierung diese beiden Benutzer abgleicht, bevor Zugriff auf die Datenbank gewährt wird, muss für diesen Fall eine selbst konfigurierte Zuordnung zwischen Domänenbenutzer und PostgreSQL-Login-Name erstellt werden.

Eine solche Zuordnung kann folgendermaßen erstellt werden:

  1. In der Datei C:\Program Files\PostgreSQL\13\data\pg_hba.conf muss hinter der Authentifizierungsmethode (im Falle der Windows-Authentifizierung der Wert sspi) ein Zuordnungsname im Format map=[Zuordnungsname] angegeben werden. Ein Eintrag in dieser Datei könnte dann folgendermaßen aussehen:

    TYPE DATABASE USER ADDRESS METHOD
    host all Domänenbenutzer/Login-Rolle 127.0.0.1/32 sspi map=[Zuordnungsname]
  2. Anschließend muss in der Datei C:\Program Files\PostgreSQL\13\data\pg_ident.conf für den angegebenen Zuordnungsnamen die eigentliche Zuordnung angegeben werden.

    MAPNAME SYSTEM-USERNAME PG-USERNAME
    [Zuordnungsname] Domänen-/Systembenutzer PostgreSQL-Login-Name

Es können hierbei auch mehrere Domänen-/Systembenutzer für einen einzelnen Zuordnungsnamen in mehreren Zeilen angegeben werden. Außerdem gibt es die Möglichkeit als erstes Zeichen der der Spalte SYSTEM-USERNAME Slash (/) anzugeben, was zur Folge hat, dass der Rest des Feldes als regulärer Ausdruck interpretiert wird.

Weitere Informationen zur Benutzernamenzuordnung finden Sie hier: PostgreSQL: Documentation: User Name Maps