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
Zur Clusterseite.
Klicken Sie auf den Namen des Clusters, dem Sie einen Nutzer hinzufügen möchten.
Klicken Sie auf Nutzer.
Klicken Sie auf Nutzerkonto hinzufügen.
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.
Geben Sie einen Nutzernamen und ein Passwort für den neuen Nutzer ein.
So weisen Sie dem Nutzer andere Rollen als die Standardrolle
alloydbsuperuserzu:- Geben Sie unter Rollen den Namen der Rolle ein.
- Drücken Sie die Eingabetaste oder die Tabulatortaste, um die Rolle hinzuzufügen.
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.
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_IDErsetzen Sie Folgendes:
USERNAME: Der Nutzername des Datenbanknutzers.USERNAMEmuss den Regeln für SQL-IDs entsprechen: ohne Sonderzeichen oder in doppelte Anführungszeichen gesetzt. Beispiel:db_user_1PASSWORD: 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 Rollealloydbsuperuserzu.
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 Rollealloydbsuperuserzu.
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_IDErsetzen 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_IDErsetzen 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
psqldie Rollealloydbsuperuserzuweisen oder den Befehlgcloud alloydb users set-superusermit dem Argument--superuser=trueausführen:gcloud alloydb users set-superuser USERNAME \ --superuser=true \ --cluster=CLUSTER_ID \ --region=REGION_IDErsetzen 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
Zur Clusterseite.
Klicken Sie auf den Namen des Clusters, der den Datenbanknutzer enthält.
Klicken Sie auf Nutzer.
Klicken Sie in der Zeile, die den Nutzer darstellt, auf Aktionen für diesen Nutzer öffnen.
Wählen Sie Passwort ändern aus.
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.
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_IDErsetzen 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 Rollealloydbsuperuser.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_IDErsetzen 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_IDCLUSTER_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
Zur Clusterseite.
Klicken Sie auf den Namen des Clusters, dessen Nutzer Sie aufrufen möchten.
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_IDErsetzen 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:
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
USERNAMEdurch den Namen des Nutzers, den Sie löschen möchten.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ältOBJECT_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.
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:
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.
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ältTABLE_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
Zur Clusterseite.
Klicken Sie auf den Namen des Clusters, der den Nutzer enthält.
Klicken Sie auf Nutzer.
Klicken Sie in der Zeile, die den Nutzer darstellt, auf Aktionen für diesen Nutzer öffnen.
Klicken Sie auf Entfernen.
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_IDErsetzen 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.