PostgreSQL-Nutzer mit integrierter Authentifizierung verwalten

Wenn Sie den Datenbankzugriff mit passwortbasierten Anmeldedaten steuern möchten, können Sie PostgreSQL- und AlloyDB for PostgreSQL-Rollen, ‑Nutzer und ‑Gruppen mithilfe der integrierten Authentifizierung erstellen, verwalten und entfernen.

PostgreSQL-Nutzer in AlloyDB erstellen

Wenn Sie PostgreSQL-Nutzer erstellen, haben diese anfangs nur die Berechtigung LOGIN. Weitere Informationen zu diesen Berechtigungen finden Sie unter CREATE USER.

Mit dem Befehl ALTER ROLE können Sie die Berechtigungen jedes Nutzers ändern. Wenn Sie einen neuen Nutzer mit dem psql-Client erstellen, können Sie ihn mit einer anderen Rolle verknüpfen oder ihm andere Berechtigungen zuweisen.

Nutzer verwalten

Sie können AlloyDB-Nutzer mit der Google Cloud CLI oder mit PostgreSQL-Befehlen erstellen und verwalten. In den folgenden Abschnitten werden gängige Aufgaben zur Nutzerverwaltung mit beiden Methoden beschrieben.

Hinweis

Wenn Sie PostgreSQL-Befehle zum Verwalten von Nutzern in einem Cluster verwenden möchten, benötigen Sie Folgendes:

  • Zugriff auf den psql-Client
  • Zugriff auf den postgres-Datenbanknutzer oder eine andere Nutzerrolle mit den entsprechenden Administratorberechtigungen

Wenn Sie die Google Cloud Console oder die Google Cloud CLI verwenden möchten, um Nutzer in einem Cluster zu verwalten, muss dieser Cluster eine primäre Instanz haben. Wenn Ihr Cluster keine primäre Instanz hat, müssen Sie eine erstellen, bevor Sie Nutzer verwalten können.

Einen Datenbanknutzer erstellen

Folgen Sie den Schritten in diesem Abschnitt, um einen Datenbanknutzer zu erstellen, der sich mit einem Nutzernamen und einem Passwort direkt bei der Datenbank authentifiziert (auch als integrierte Authentifizierung bezeichnet).

Wenn Sie stattdessen einen Datenbanknutzer erstellen möchten, der sich über Identity and Access Management (IAM) authentifiziert, finden Sie weitere Informationen unter IAM-Authentifizierung verwalten.

Console

  1. Zur Clusterseite.

    Zu den Clustern

  2. Klicken Sie auf den Namen des Clusters, dem Sie einen Nutzer hinzufügen möchten.

  3. Klicken Sie auf Nutzer.

  4. Klicken Sie auf Nutzerkonto hinzufügen.

  5. Lassen Sie Integrierte Authentifizierung ausgewählt.

    Wenn Sie IAM zur Authentifizierung und Anmeldung bei Ihren Datenbankclustern verwenden möchten, müssen Sie zusätzliche Schritte ausführen, um Ihr Projekt vorzubereiten und Ihrem neuen Nutzer die entsprechenden Berechtigungen zu gewähren. Weitere Informationen finden Sie unter IAM-Authentifizierung verwalten.

  6. Geben Sie einen Nutzernamen und ein Passwort für den neuen Nutzer ein.

  7. So weisen Sie dem Nutzer andere Rollen als die Standardrolle alloydbsuperuser zu:

    1. Geben Sie unter Rollen den Namen der Rolle ein.
    2. Drücken Sie die Eingabetaste oder die Tabulatortaste, um die Rolle hinzuzufügen.
    3. Wählen Sie für jede Rolle, die Sie für diesen Nutzer entfernen möchten, x aus.

      Weitere Informationen finden Sie unter Vordefinierte Rollen.

  8. Klicken Sie auf Hinzufügen.

psql

Führen Sie die folgende CREATE USER-Anweisung aus:

CREATE USER USERNAME WITH PASSWORD 'PASSWORD';

Ersetzen Sie Folgendes:

  • USERNAME: Der Nutzername des Datenbanknutzers.

  • PASSWORD: das Passwort, das dem Nutzer zugewiesen werden soll.

Weitere Informationen zum Erstellen und Definieren von Datenbanknutzern finden Sie unter CREATE USER.

Nachdem Sie einen Nutzer erstellt haben, können Sie die Berechtigungen mit dem Befehl ALTER ROLE im psql-Client ändern.

gcloud

Verwenden Sie den folgenden gcloud alloydb users create-Befehl:

gcloud alloydb users create USERNAME \
--password=PASSWORD \
--cluster=CLUSTER_ID \
--region=REGION_ID

Ersetzen Sie Folgendes:

  • USERNAME: Der Nutzername des Datenbanknutzers. USERNAME muss den Regeln für SQL-IDs entsprechen: ohne Sonderzeichen oder in doppelte Anführungszeichen gesetzt. Beispiel: db_user_1

  • PASSWORD: Das Passwort des Datenbanknutzers. Wenn Sie den Nutzer ohne Passwort erstellen möchten, lassen Sie dieses Argument weg.

  • CLUSTER_ID: die ID des Clusters, dem der Nutzer hinzugefügt werden soll.

  • REGION_ID: die ID der Region, in der sich der Cluster befindet. Beispiel: us-central1.

Nachdem Sie einen Nutzer erstellt haben, können Sie seine Berechtigungen mit dem Befehl gcloud alloydb users set-roles ändern.

Außerdem können Sie einem Nutzer beim Erstellen Rollen oder Superuser-Berechtigungen zuweisen. Fügen Sie dazu die Argumente --db-roles oder --superuser ein, wie im folgenden Abschnitt beschrieben.

Datenbanknutzern Rollen zuweisen

Console

Wenn Sie einem vorhandenen Datenbanknutzer in der Google Cloud Console Rollen zuweisen möchten, stellen Sie mit AlloyDB Studio eine Verbindung zu Ihrer Datenbank her und führen Sie die folgende GRANT-Anweisung aus:

GRANT ROLE TO USERNAME;

Ersetzen Sie Folgendes:

  • USERNAME: Der Nutzername des Datenbanknutzers.

  • ROLE: die Rolle, die dem Nutzer zugewiesen werden soll. Wenn Sie dem Nutzer beispielsweise Superuser-Berechtigungen gewähren möchten, weisen Sie ihm die Rolle alloydbsuperuser zu.

psql

GRANT ROLE TO USERNAME;

Ersetzen Sie Folgendes:

  • USERNAME: Der Nutzername des Datenbanknutzers.

  • ROLE: die Rolle, die dem Nutzer zugewiesen werden soll. Wenn Sie dem Nutzer beispielsweise Superuser-Berechtigungen gewähren möchten, weisen Sie ihm die Rolle alloydbsuperuser zu.

gcloud

Verwenden Sie den folgenden gcloud alloydb users set-roles-Befehl, um alle Rollen anzugeben, die der Nutzer haben soll:

gcloud alloydb users set-roles USERNAME \
--db-roles=ROLES \
--cluster=CLUSTER_ID \
--region=REGION_ID

Ersetzen Sie Folgendes:

  • USERNAME: Der Nutzername des Datenbanknutzers.

  • ROLES: eine durch Kommas getrennte Liste aller Rollen, die der Nutzer haben soll. Listen Sie alle Rollen auf, einschließlich vorhandener und neuer Rollen.

    Führen Sie den folgenden Befehl aus, um die Liste der vorhandenen Rollen aufzurufen, die dem Nutzer zugewiesen sind:

    gcloud alloydb users list --cluster=CLUSTER_ID --region=REGION_ID

    Ersetzen Sie Folgendes:

    • CLUSTER_ID: die ID des Clusters, der den Nutzer enthält.

    • REGION_ID: die ID der Region, in der sich der Cluster befindet. Beispiel: us-central1.

    Wenn Sie einem Nutzer Superuser-Berechtigungen gewähren möchten, können Sie ihm entweder manuell mit psql die Rolle alloydbsuperuser zuweisen oder den Befehl gcloud alloydb users set-superuser mit dem Argument --superuser=true ausführen:

    gcloud alloydb users set-superuser USERNAME \
    --superuser=true \
    --cluster=CLUSTER_ID \
    --region=REGION_ID

    Ersetzen Sie Folgendes:

    • USERNAME: Der Nutzername des Datenbanknutzers.

    • CLUSTER_ID: die ID des Clusters, der den Nutzer enthält.

    • REGION_ID: die ID der Region, in der sich der Cluster befindet. Beispiel: us-central1.

Passwort eines Datenbanknutzers ändern

Folgen Sie den Schritten in diesem Abschnitt, um ein neues Passwort für einen Standard-PostgreSQL-Datenbanknutzer festzulegen.

Sie können das Passwort eines IAM-basierten Nutzers nicht ändern oder festlegen, da IAM-Nutzer keine Passwörter zur Authentifizierung verwenden. Weitere Informationen finden Sie unter Verbindung über ein IAM-Konto herstellen.

Console

  1. Zur Clusterseite.

    Zu den Clustern

  2. Klicken Sie auf den Namen des Clusters, der den Datenbanknutzer enthält.

  3. Klicken Sie auf Nutzer.

  4. Klicken Sie in der Zeile, die den Nutzer darstellt, auf Aktionen für diesen Nutzer öffnen.

  5. Wählen Sie Passwort ändern aus.

  6. Geben Sie ein Passwort an:

    • Wenn Sie ein neues Passwort für diesen Nutzer festlegen möchten, geben Sie das Passwort in das Feld Passwort ein.

    • Wenn Sie für diesen Nutzer kein Passwort festlegen möchten, wählen Sie das Kästchen Kein Passwort aus.

  7. Klicken Sie auf OK.

psql

ALTER USER USERNAME WITH PASSWORD 'PASSWORD';

Weitere Informationen zum Ändern des Passworts eines Nutzers finden Sie unter ALTER ROLE.

gcloud

Verwenden Sie den folgenden gcloud alloydb users set-password Befehl:

gcloud alloydb users set-password USERNAME \
--password=PASSWORD \
--cluster=CLUSTER_ID \
--region=REGION_ID

Ersetzen Sie Folgendes:

  • USERNAME: Der Nutzername des Datenbanknutzers.

  • PASSWORD: das neue Passwort, das dem Nutzer zugewiesen werden soll.

  • CLUSTER_ID: Die ID des Clusters, zu dem der Nutzer gehört.

  • REGION_ID: die ID der Region, in der sich der Cluster befindet. Beispiel: us-central1.

Rolle eines Datenbanknutzers widerrufen

Console

Wenn Sie einem Nutzer in der Google Cloud Console Rollen entziehen möchten, stellen Sie mit AlloyDB Studio eine Verbindung zu Ihrer Datenbank her und führen Sie die folgende REVOKE-Anweisung aus:

REVOKE ROLE FROM USERNAME;

Ersetzen Sie Folgendes:

  • ROLE: Die Rolle, die dem Nutzer entzogen werden soll. Wenn Sie die Superuser-Berechtigungen eines Nutzers entfernen möchten, entziehen Sie ihm die Rolle alloydbsuperuser.

  • USERNAME: Der Nutzername des Datenbanknutzers.

psql

Sie können einer oder mehreren Rollen zuvor gewährte Berechtigungen entziehen oder die Mitgliedschaft eines Nutzers in einer Rolle entziehen, wie hier gezeigt:

REVOKE ROLE FROM USERNAME;

Wenn Sie die Superuser-Berechtigungen eines Nutzers entfernen möchten, entziehen Sie ihm die Rolle alloydbsuperuser.

gcloud

Wenn Sie eine Rolle mit der Google Cloud CLI widerrufen möchten, verwenden Sie den folgenden gcloud alloydb users set-roles-Befehl, um alle Rollen anzugeben, die der Nutzer haben soll, und lassen Sie die Rollen weg, die Sie dem Nutzer entziehen möchten:

gcloud alloydb users set-roles USERNAME \
--db-roles=ROLES \
--cluster=CLUSTER_ID \
--region=REGION_ID

Ersetzen Sie Folgendes:

  • USERNAME: Der Nutzername des Datenbanknutzers.

  • ROLES: eine durch Kommas getrennte Liste aller Rollen, die der Nutzer haben soll. Listen Sie alle Rollen auf, einschließlich vorhandener und neuer Rollen.

    Führen Sie den folgenden Befehl aus, um die Liste der vorhandenen Rollen aufzurufen, die dem Nutzer zugewiesen sind:

    gcloud alloydb users list --cluster=CLUSTER_ID --region=REGION_ID
  • CLUSTER_ID: die ID des Clusters, der den Nutzer enthält.

  • REGION_ID: die ID der Region, in der sich der Cluster befindet. Beispiel: us-central1.

Wenn Sie Superuser-Berechtigungen widerrufen möchten, können Sie entweder die Rolle alloydbsuperuser eines Nutzers manuell mit psql entfernen oder den Befehl gcloud alloydb users set-superuser mit dem Argument --superuser=false ausführen.

Liste der Datenbanknutzer aufrufen

Console

  1. Zur Clusterseite.

    Zu den Clustern

  2. Klicken Sie auf den Namen des Clusters, dessen Nutzer Sie aufrufen möchten.

  3. Klicken Sie auf Nutzer.

psql

Verwenden Sie den folgenden \du-Befehl, um eine Tabelle aller Datenbanknutzer auszugeben, einschließlich ihrer Gruppenzugehörigkeiten:

\du

gcloud

Verwenden Sie den folgenden gcloud alloydb users list Befehl:

gcloud alloydb users list \
--cluster=CLUSTER_ID \
--region=REGION_ID

Ersetzen Sie Folgendes:

  • CLUSTER_ID: die ID des Clusters, der die Nutzer enthält.

  • REGION_ID: die ID der Region, in der sich der Cluster befindet. Beispiel: us-central1.

Nutzerabhängigkeiten entfernen

Bevor Sie einen Datenbanknutzer löschen können, müssen Sie alle Datenbankobjekte entfernen, die diesem Nutzer gehören, und alle ihm gewährten Berechtigungen widerrufen. Andernfalls schlägt der Löschversuch mit einem Fehler fehl (z. B. ERROR: role "username" cannot be dropped because some objects depend on it).

Wenn Sie diese Abhängigkeiten identifizieren und entfernen möchten, stellen Sie mit dem psql-Client als postgres-Nutzer oder mit einem Konto mit der Rolle alloydbsuperuser eine Verbindung zu Ihrer Datenbank her und führen Sie die folgenden Schritte für jede Datenbank in Ihrem Cluster aus:

  1. Führen Sie die folgende Abfrage aus, um die Objekte wie Tabellen, Ansichten, Schemas und Datenbanken aufzulisten, die dem Nutzer gehören, den Sie löschen möchten:

    SELECT
        n.nspname AS schema_name,
        c.relname AS object_name,
        CASE c.relkind
          WHEN 'r' THEN 'table'
          WHEN 'v' THEN 'view'
          WHEN 'm' THEN 'materialized view'
          WHEN 'i' THEN 'index'
          WHEN 'S' THEN 'sequence'
          WHEN 't' THEN 'TOAST table'
          WHEN 'f' THEN 'foreign table'
          WHEN 'p' THEN 'partitioned table'
          WHEN 'I' THEN 'partitioned index'
        END as object_type
    FROM pg_catalog.pg_class c
    JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
    WHERE pg_catalog.pg_get_userbyid(c.relowner) = 'USERNAME'
      AND n.nspname NOT IN ('pg_catalog', 'information_schema')
      AND n.nspname !~ '^pg_toast';
    

    Ersetzen Sie USERNAME durch den Namen des Nutzers, den Sie löschen möchten.

  2. Sie müssen die Eigentümerschaft für jedes der identifizierten Objekte ändern.

    • So ändern Sie den Eigentümer einer Tabelle oder Ansicht:

      ALTER TABLE SCHEMA_NAME.OBJECT_NAME OWNER TO NEW_OWNER;
      

      Ersetzen Sie Folgendes:

      • SCHEMA_NAME: Name des Schemas, das die Tabelle oder Ansicht enthält

      • OBJECT_NAME: der Name der Tabelle oder Ansicht.

      • NEW_OWNER: der Nutzername des Nutzers, dem Sie die Inhaberschaft übertragen möchten.

    • So ändern Sie den Inhaber einer Datenbank:

      ALTER DATABASE DATABASE_NAME OWNER TO NEW_OWNER;
      

      Ersetzen Sie Folgendes:

      • DATABASE_NAME: Der Name der Datenbank.

      • NEW_OWNER: der Nutzername des Nutzers, dem Sie die Inhaberschaft übertragen möchten.

  3. Berechtigungen identifizieren und widerrufen Der Nutzer hat möglicherweise auch Berechtigungen für andere Objekte oder Rollenmitgliedschaften, die das Löschen verhindern.

    • So listen Sie die Rollenmitgliedschaften für den Nutzer auf:

      WITH RECURSIVE cte AS (
      SELECT oid ,oid as member_of,1 as d,''::name as path FROM pg_roles r where r.rolname !~ '^pg_'
          UNION
          SELECT m.roleid,m.member as member_of ,d+1,path||'->'||pg_get_userbyid(cte.oid) as path
          FROM cte
          JOIN pg_auth_members m ON m.member = cte.oid where d<15
      )
      SELECT
      DISTINCT pg_get_userbyid(member_of)::varchar AS username,
      pg_get_userbyid(oid)::varchar as parent_role,
      d::int as depth, substr(path::text||'->'||pg_get_userbyid(oid),3) as path
      FROM cte
      WHERE d > 1
      ORDER BY depth;
      
    • So entziehen Sie die Rollenmitgliedschaft:

      REVOKE ROLE_NAME FROM USERNAME;
      

      Ersetzen Sie Folgendes:

      • ROLE_NAME: die Rollenmitgliedschaft, die Sie widerrufen möchten.

      • USERNAME: der Name des Nutzers, dessen Rollenmitgliedschaft Sie widerrufen möchten.

    • So widerrufen Sie Berechtigungen für eine Tabelle:

      1. Weisen Sie dem ausführenden Nutzer die Rolle „Tabelleninhaber“ zu:

        GRANT TABLE_OWNER TO EXECUTOR_USER;
        

        Ersetzen Sie Folgendes:

        • TABLE_OWNER: der Nutzername oder die Rolle, die Inhaber der Tabelle ist.

        • EXECUTOR_USER: der Nutzername des ausführenden Nutzers, z. B. postgres.

      2. Widerrufen Sie die Berechtigungen für die Tabelle:

        REVOKE ALL PRIVILEGES ON TABLE SCHEMA_NAME.TABLE_NAME FROM USERNAME;
        

        Ersetzen Sie Folgendes:

        • SCHEMA_NAME: Name des Schemas, das die Tabelle enthält

        • TABLE_NAME: der Name der Tabelle.

        • USERNAME: der Name des Nutzers, dessen Berechtigungen Sie widerrufen möchten.

Datenbanknutzer löschen

Bevor Sie einen Nutzer löschen, müssen Sie alle seine Objekte entfernen oder neu zuweisen. Alle Berechtigungen, die dem Nutzer für andere Objekte gewährt wurden, müssen aufgehoben werden. Weitere Informationen finden Sie unter Nutzerabhängigkeiten entfernen.

Console

  1. Zur Clusterseite.

    Zu den Clustern

  2. Klicken Sie auf den Namen des Clusters, der den Nutzer enthält.

  3. Klicken Sie auf Nutzer.

  4. Klicken Sie in der Zeile, die den Nutzer darstellt, auf Aktionen für diesen Nutzer öffnen.

  5. Klicken Sie auf Entfernen.

  6. Klicken Sie im Dialogfeld Nutzerkonto entfernen? auf Entfernen.

psql

Verwenden Sie:

DROP ROLE USERNAME;

gcloud

Verwenden Sie den folgenden gcloud alloydb users delete-Befehl:

gcloud alloydb users delete USERNAME \
--cluster=CLUSTER_ID \
--region=REGION_ID

Ersetzen Sie Folgendes:

  • USERNAME: Der Nutzername des Datenbanknutzers.

  • CLUSTER_ID: Die ID des Clusters, zu dem der Nutzer gehört.

  • REGION_ID: die ID der Region, in der sich der Cluster befindet. Beispiel: us-central1.

Nächste Schritte