PostgreSQL-Nutzer und ‑Rollen

Auf dieser Seite erfahren Sie, wie Cloud SQL mit PostgreSQL-Nutzern und -Rollen arbeitet. Mit PostgreSQL-Rollen können Sie den Zugriff und die Funktionen von Nutzern steuern, die auf eine PostgreSQL-Instanz zugreifen.

Die vollständige Dokumentation zu PostgreSQL-Rollen finden Sie unter Datenbankrollen in der PostgreSQL-Dokumentation. Weitere Informationen zum Erstellen und Verwalten von Cloud SQL-Nutzern finden Sie unter Nutzer erstellen und verwalten.

Unterschied zwischen Nutzern und Rollen

PostgreSQL-Rollen können eine einzelne Rolle oder eine Gruppe von Rollen darstellen. Ein Nutzer ist eine Rolle mit der Berechtigung zur Anmeldung (die Rolle hat das Attribut LOGIN). Da alle Rollen, die von Cloud SQL erstellt werden, das Attribut LOGIN enthalten, verwendet Cloud SQL die Begriffe Rolle und Nutzer synonym. Wenn Sie jedoch eine Rolle mit dem psql-Client erstellen, hat die Rolle nicht unbedingt das Attribut LOGIN.

Alle PostgreSQL-Nutzer müssen ein Passwort haben. Sie können sich nicht mit einem Nutzer anmelden, der kein Passwort hat.

Superuser-Einschränkungen und -Berechtigungen

Cloud SQL for PostgreSQL ist ein verwalteter Dienst, daher wird der Zugriff auf bestimmte Systemprozeduren und -tabellen eingeschränkt, für die erweiterte Berechtigungen erforderlich sind. In Cloud SQL können Kunden keine Nutzer mit Superuser-Attributen erstellen oder darauf zugreifen.

Sie können keine Datenbanknutzer mit Superuser-Berechtigungen erstellen. Sie können jedoch Datenbanknutzer mit der Rolle cloudsqlsuperuser erstellen, die einige dieser Superuser-Berechtigungen hat, darunter:

  • Erweiterungen erstellen, die Superuser-Berechtigungen erfordern.
  • Ereignistrigger erstellen.
  • Replikationsnutzer erstellen.
  • Replikationspublikationen und -abos erstellen.
  • Die Anweisungen CREATE CAST und DROP CAST als Datenbanknutzer mit der Rolle cloudsqlsuperuser ausführen. Dieser Nutzer muss jedoch die Berechtigung USAGE für die Quell- und die Zieldatentypen haben. Ein Nutzer kann beispielsweise eine Umwandlung erstellen, die den Quell-Datentyp int in den Ziel-Datentyp boolean konvertiert.

  • Vollständiger Zugriff auf die Katalogtabelle pg_largeobject.

PostgreSQL-Standardnutzer

Wenn Sie eine neue Cloud SQL for PostgreSQL-Instanz erstellen, wird der Standardadministrator postgres erstellt, aber nicht das zugehörige Passwort. Sie müssen ein Passwort für diesen Nutzer festlegen, bevor Sie sich anmelden können. Dies können Sie entweder in der Google Cloud Console oder mit dem folgenden gcloud Befehl tun:

gcloud sql users set-password postgres \
--instance=INSTANCE_NAME \
--password=PASSWORD

Der Nutzer postgres gehört zur Rolle cloudsqlsuperuser und hat die folgenden Attribute (Berechtigungen): CREATEROLE, CREATEDB und LOGIN. Er hat nicht die Attribute SUPERUSER oder REPLICATION.

Ein Standardnutzer cloudsqlimportexport wird mit den minimalen Berechtigungen erstellt, die für CSV-Importe und -Exporte erforderlich sind. Sie können Ihre eigenen Nutzer erstellen, um diese Vorgänge auszuführen. Wenn Sie das nicht tun, wird der Standardnutzer cloudsqlimportexport verwendet. Der Nutzer cloudsqlimportexport ist ein Systemnutzer, den Sie nicht direkt verwenden können.

Cloud SQL-Systemnutzer und -Rollen

Cloud SQL verwendet Systemnutzer und -Rollen zur Unterstützung von Cloud SQL-Funktionen. Sie können Cloud SQL-Systemrollen oder -Nutzer nicht löschen oder ändern. Sie können Datenbanknutzern keine Systemrollen außer der Rolle cloudsqlsuperuser zuweisen. Sie können Systemnutzern keine Datenbankrollen zuweisen.

  • Systemrollen

    • cloudsqliamgroup

      Wird verwendet, um ein IAM-Gruppenauthentifizierungskonto ohne Anmeldung zu kennzeichnen, das für die IAM-Gruppenauthentifizierung verwendet wird.

    • cloudsqlinactiveuser

      Wird verwendet, um ein IAM-Gruppenauthentifizierungskonto als inaktiv zu kennzeichnen.

    • cloudsqliamgroupserviceaccount

      Wird verwendet, um ein IAM-Dienstkonto zu kennzeichnen, das sich mit der IAM-Gruppenauthentifizierung authentifiziert.

    • cloudsqliamgroupuser

      Wird verwendet, um einen IAM-Nutzer zu kennzeichnen, der sich mit der IAM-Gruppenauthentifizierung authentifiziert.

    • cloudsqliamserviceaccount

      Wird verwendet, um ein IAM-Dienstkonto zu kennzeichnen, das sich mit der IAM-Datenbankauthentifizierung authentifiziert.

    • cloudsqliamuser

      Wird verwendet, um einen IAM-Nutzer zu kennzeichnen, der sich mit der IAM-Datenbankauthentifizierung authentifiziert.

    • cloudsqlsuperuser

      Rolle, die Nutzern mit eingeschränkten Superuser-Berechtigungen gewährt wird. Die Rolle cloudsqlsuperuser wird automatisch neuen PostgreSQL-Nutzern gewährt, die die integrierte Authentifizierung verwenden.

  • Systemnutzer

    • cloudsqladmin

      Systemnutzer mit Superuser-Berechtigungen für die Datenbank.

    • cloudsqlagent

      Wird für die Überwachung von Datenbanken verwendet.

    • cloudsqlconnpooladmin

      Wird für verwaltetes Verbindungs-Pooling verwendet.

    • cloudsqlimportexport

      Wird für den Datenimport und ‑export verwendet.

    • cloudsqllogical

      Wird für die Erstellung der logischen Replikation verwendet.

    • cloudsqlobservability

      Wird für die Beobachtbarkeit von Datenbanken verwendet, z. B. für den Indexberater und aktive Abfragen.

    • cloudsqlreplica

      Wird für die Replikation verwendet.

Cloud SQL-IAM-Nutzer für die IAM-Authentifizierung

Identity and Access Management (IAM) ist in Cloud SQL über ein Feature namens IAM-Datenbankauthentifizierung eingebunden. Wenn Sie Instanzen mit diesem Feature erstellen, können sich IAM-Nutzer mit ihren IAM-Nutzernamen und ‑Passwörtern bei der Instanz anmelden. Der Vorteil der Verwendung der IAM-Authentifizierung besteht darin, dass Sie die vorhandenen IAM-Anmeldedaten eines Nutzers verwenden können, wenn Sie ihm Zugriff auf eine Datenbank gewähren. Wenn der Nutzer die Organisation verlässt, wird sein IAM-Konto gesperrt und der Zugriff wird automatisch aufgehoben.

Weitere PostgreSQL-Nutzer

Sie können weitere PostgreSQL-Nutzer oder -Rollen erstellen. Nutzer, die mit Cloud SQL erstellt wurden und nicht über IAM erstellt wurden, gehören zur Rolle cloudsqlsuperuser und haben dieselben Attribute wie der Nutzer postgres: CREATEROLE, CREATEDB und LOGIN. Mit dem Befehl ALTER ROLE können Sie die Attribute von Nutzern ändern.

Wenn Sie einen neuen Nutzer mit dem psql-Client erstellen, können Sie ihn mit einer anderen Rolle verknüpfen oder ihm andere Attribute zuweisen.

PostgreSQL-Rollen

Sie können in PostgreSQL benutzerdefinierte Rollen erstellen, um Datenbankberechtigungen für Ihre PostgreSQL-Nutzer zu organisieren und zuzuweisen. Sie können Rollen verwenden, um Nutzern beim Erstellen einer Cloud SQL-Instanz anfängliche Datenbankberechtigungen zu gewähren.

Weitere Informationen zum Erstellen und Verwenden von Rollen in PostgreSQL, siehe Datenbankrollen.

Wenn Sie in Cloud SQL for PostgreSQL einen integrierten PostgreSQL-Nutzer erstellen und keine Datenbankrollen zuweisen, wird dem Nutzer automatisch die Rolle cloudsqlsuperuser gewährt. Alternativ können Sie einen neuen PostgreSQL-Nutzer erstellen und eine andere benutzerdefinierte Rolle oder Rollen mit detaillierteren Berechtigungen zuweisen. Weitere Informationen zum Zuweisen von Rollen zu Nutzern in Cloud SQL for PostgreSQL, siehe Nutzer mit integrierter Authentifizierung verwalten.

Sicherer Suchpfad

Um die Übernahme des Suchpfads zu verhindern, muss für Nutzer mit hohen Berechtigungen der Parameter search_path auf pg_catalog gesetzt sein. So wird sichergestellt, dass der Suchpfad geschützt ist und nicht vertrauenswürdige Schemas wie public umgangen werden.

Führen Sie den folgenden Befehl aus, um dies dauerhaft für einen Nutzer festzulegen:

ALTER ROLE <var>USER_NAME</var> SET search_path = pg_catalog;

Führen Sie den folgenden Befehl aus, um ihn für die aktuelle Sitzung festzulegen:

SET search_path TO pg_catalog;

Weitere Informationen finden Sie in der PostgreSQL-Dokumentation zur sicheren Schemanutzung und im Leitfaden zu CVE-2018-1058.

IAM-Nutzer und Datenbankrollen

Wenn Sie in Cloud SQL for PostgreSQL ein IAM-Nutzerkonto erstellen und keine Datenbankrollen zuweisen, werden dem Nutzer keine Datenbankrollen automatisch gewährt.

Sie können IAM-Nutzern, Dienstkonten oder Gruppen die Rolle cloudsqlsuperuser und benutzerdefinierte Datenbankrollen gewähren, indem Sie Datenbankrollen zuweisen, wenn Sie die IAM-Konten in der Instanz erstellen oder aktualisieren.

Weitere Informationen zum Zuweisen von Rollen zu IAM-Nutzern finden Sie unter Datenbankrollen zuweisen, wenn Sie einer Instanz ein IAM-Konto hinzufügen.

Zugriff auf die Ansicht pg_shadow und die Tabelle pg_authid

Durch Verwendung der Ansicht pg_shadow können Sie mit den Attributen von Rollen arbeiten, die in der Katalogtabelle pg_authid als rolcanlogin markiert sind.

Die Ansicht pg_shadow enthält gehashte Passwörter und andere Attribute der Rollen (Nutzer), die sich in einem Cluster anmelden dürfen. Die Katalogtabelle pg_authid enthält gehashte Passwörter und andere Attribute für alle Datenbankrollen.

In Cloud SQL können Kunden mit den Standardberechtigungen nicht auf die Ansicht pg_shadow oder die Tabelle pg_authid zugreifen. Der Zugriff auf Rollennamen und gehashte Passwörter ist jedoch in bestimmten Situationen nützlich, z. B.:

  • Proxys oder Lastenausgleich mit vorhandenen Nutzern und Passwörtern einrichten
  • Nutzer ohne Änderungen an Passwörtern migrieren
  • Benutzerdefinierte Lösungen für die Verwaltung von Passwortrichtlinien implementieren

Flags für die Ansicht pg_shadow und die Tabelle pg_authid festlegen

Wenn Sie auf die pg_shadow Ansicht zugreifen möchten, legen Sie das cloudsql.pg_shadow_select_role Flag auf einen PostgreSQL-Rollennamen fest. Wenn Sie auf die Tabelle pg_authid zugreifen möchten, legen Sie das cloudsql.pg_authid_select_role Flag auf einen PostgreSQL-Rollennamen fest.

Wenn cloudsql.pg_shadow_select_role vorhanden ist, dann hat es schreibgeschützt (SELECT )-Zugriff auf die pg_shadow-Ansicht: Wenn das cloudsql.pg_authid_select_role vorhanden ist, dann hat es SELECT Zugriff auf die Tabelle pg_authid.

Wenn eine der beiden Rollen nicht vorhanden ist, haben die Einstellungen keine Auswirkungen, aber es tritt auch kein Fehler auf. Es wird jedoch ein Fehler protokolliert, wenn ein Nutzer versucht, auf die Ansicht oder die Tabelle zuzugreifen. Der Fehler wird im PostgreSQL-Datenbanklog protokolliert: cloudsql.googleapis.com/postgres.log. Informationen zum Aufrufen dieses Logs finden Sie unter Instanzlogs ansehen.

Achten Sie darauf, dass die konfigurierten Rollen vorhanden sind und dass der Wert des Flags cloudsql.pg_shadow_select_role oder des Flags cloudsql.pg_authid_select_role keine Tippfehler enthält. Sie können auch die Funktion pg_has_role verwenden, um zu prüfen, ob ein Nutzer Mitglied dieser Rollen ist. Informationen zu dieser Funktion finden Sie auf der Seite Systeminformationsfunktionen und ‑operatoren.

Sie können das Flag cloudsql.pg_shadow_select_role oder cloudsql.pg_authid_select_role mit der PostgreSQL-Rollenmitgliedschaft verwenden, um den Zugriff von pg_shadow oder pg_authid für mehrere Nutzer zu verwalten.

Änderungen an einem der beiden Flags erfordern keinen Neustart der Datenbank.

Weitere Informationen zu unterstützten Flags finden Sie unter Datenbank-Flags konfigurieren.

Format für die Passwortspeicherung auswählen

In Cloud SQL for PostgreSQL werden Nutzerpasswörter in einem gehashten Format gespeichert. Mit dem Flag password_encryption können Sie den Verschlüsselungsalgorithmus auf md5 oder scram-sha-256 festlegen. Der md5-Algorithmus bietet die größtmögliche Kompatibilität. scram-sha-256 ist zwar sicherer, dafür aber möglicherweise nicht mit älteren Clients kompatibel.

Wenn Sie den Zugriff auf pg_shadow aktivieren, um Rollenattribute aus einer Cloud SQL-Instanz zu exportieren, sollten Sie den sichersten Algorithmus verwenden, der von Ihren Clients unterstützt wird.

Weitere Informationen finden Sie in der PostgreSQL-Dokumentation unter:

Nächste Schritte