Auf dieser Seite wird beschrieben, wie Sie sowohl PostgreSQL- als auch AlloyDB for PostgreSQL-Rollen, ‑Nutzer und ‑Gruppen mit den passwortbasierten integrierten PostgreSQL-Authentifizierungsmethoden erstellen, verwalten und entfernen.
PostgreSQL-Nutzer in AlloyDB erstellen
Wenn Sie PostgreSQL-Nutzer erstellen, haben sie 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 veranschaulicht.
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
Wenn Sie einen Datenbanknutzer erstellen möchten, der sich mit einem Nutzernamen und einem Passwort direkt bei der Datenbank authentifiziert (auch als integrierte Authentifizierung bezeichnet), folgen Sie der Anleitung in diesem Abschnitt.
Wenn Sie stattdessen einen Datenbanknutzer erstellen möchten, der Identity and Access Management (IAM) zur Authentifizierung verwendet, lesen Sie den Abschnitt 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 verwenden möchten, um sich bei Ihren Datenbankclustern zu authentifizieren und anzumelden, 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 den Namen der Rolle unter Rollen ein.
- Drücken Sie die Eingabetaste oder die Tabulatortaste, um die Rolle hinzuzufügen.
Wählen Sie x für alle Rollen aus, die Sie für diesen Nutzer entfernen möchten.
Weitere Informationen finden Sie unter Vordefinierte Rollen.
Klicken Sie auf Hinzufügen.
psql
CREATE USER USERNAME WITH PASSWORD PASSWORD;
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 die folgenden Variablen:
USERNAME: Der Nutzername des Nutzers.USERNAMEmuss den Regeln für SQL-Kennungen entsprechen: ohne Sonderzeichen oder in doppelte Anführungszeichen eingeschlossen. Beispiel:db_user_1PASSWORD: Das Passwort des Nutzers. Wenn Sie den Nutzer ohne Passwort erstellen möchten, lassen Sie dieses Argument weg.CLUSTER_ID: ID des Clusters, dem der Nutzer hinzugefügt werden soll.REGION_ID: 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
Verwenden Sie psql oder die gcloud CLI, um einem Datenbanknutzer Rollen zuzuweisen, anstatt die Google Cloud Console zu verwenden.
psql
GRANT ROLE to USERNAME;
Ersetzen Sie die folgenden Variablen:
USERNAME: Der Nutzername des Nutzers.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 die folgenden Variablen:
USERNAME: Der Nutzername des Nutzers.ROLES: Durch Kommas getrennte Liste aller Rollen, die der Nutzer haben soll. Geben Sie alle Rollen an, sowohl bestehende als auch neue.Führen Sie den folgenden Befehl aus, um die Liste der vorhandenen Rollen zu finden, die dem Nutzer zugewiesen sind:
gcloud alloydb users list --cluster=CLUSTER_ID --region=REGION_IDErsetzen Sie die folgenden Variablen:
CLUSTER_ID: ID des Clusters, der den Nutzer enthält.REGION_ID: 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 die Rolle
alloydbsuperusermitpsqlzuweisen 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 die folgenden Variablen:
CLUSTER_ID: ID des Clusters, der den Nutzer enthält.REGION_ID: ID der Region, in der sich der Cluster befindet. Beispiel:us-central1.
Passwort eines Datenbanknutzers ändern
Folgen Sie der Anleitung 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 Mit einem IAM-Konto verbinden.
Console
Zur Clusterseite.
Klicken Sie auf den Namen des Clusters, der den Datenbanknutzer enthält.
Klicken Sie auf Nutzer.
Klicken Sie in der Zeile für den Nutzer 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 es in das Feld Passwort ein.
Wenn Sie für diesen Nutzer kein Passwort festlegen möchten, setzen Sie ein Häkchen bei Kein Passwort.
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 die folgenden Variablen:
USERNAME: Der Nutzername des Nutzers.PASSWORD: Das neue Passwort, das dem Nutzer zugewiesen werden soll.CLUSTER_ID: ID des Clusters, zu dem der Nutzer gehört.REGION_ID: ID der Region, in der sich der Cluster befindet. Beispiel:us-central1.
Rolle eines Datenbanknutzers widerrufen
Console
Wenn Sie Rollen für einen Nutzer widerrufen möchten, verwenden Sie psql oder die gcloud CLI anstelle der Google Cloud Console.
psql
Sie können einer oder mehreren Rollen zuvor gewährte Berechtigungen entziehen oder die Mitgliedschaft eines Nutzers in einer Rolle entziehen, wie unten gezeigt:
REVOKE ROLE FROM USERNAME;
Wenn Sie die Superuser-Berechtigungen eines Nutzers entfernen möchten, entziehen Sie ihm die Rolle alloydbsuperuser.
gcloud
Verwenden Sie den folgenden gcloud alloydb users set-roles-Befehl, um eine Rolle mit der Google Cloud CLI zu widerrufen. Geben Sie alle Rollen an, die der Nutzer haben soll, und lassen Sie Rollen weg, die Sie für den Nutzer widerrufen möchten:
gcloud alloydb users set-roles USERNAME \
--db-roles=ROLES \
--cluster=CLUSTER_ID \
--region=REGION_IDErsetzen Sie die folgenden Variablen:
USERNAME: Der Nutzername des Nutzers.ROLES: Durch Kommas getrennte Liste aller Rollen, die der Nutzer haben soll. Geben Sie alle Rollen an, sowohl vorhandene als auch neue.Führen Sie den folgenden Befehl aus, um die Liste der vorhandenen Rollen zu finden, die dem Nutzer zugewiesen sind:
gcloud alloydb users list --cluster=CLUSTER_ID --region=REGION_IDCLUSTER_ID: ID des Clusters, der den Nutzer enthält.REGION_ID: ID der Region, in der sich der Cluster befindet. Beispiel:us-central1.
Wenn Sie Superuser-Berechtigungen entziehen 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 mit allen Datenbanknutzern und ihren Gruppenzugehörigkeiten auszugeben:
\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: ID des Clusters, der die Nutzer enthält.REGION_ID: 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öschvorgang mit einem Fehler fehl (z. B. ERROR: role "username" cannot
be dropped because some objects depend on it).
Um diese Abhängigkeiten zu identifizieren und zu entfernen, stellen Sie mit dem psql-Client als postgres-Nutzer oder mit einem beliebigen 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 Inhaberschaft 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:
NEW_OWNER: Der Nutzername des Nutzers, dem Sie die Inhaberschaft übertragen möchten.
So ändern Sie den Eigentümer einer Datenbank:
ALTER DATABASE DATABASE_NAME OWNER TO NEW_OWNER;
Berechtigungen identifizieren und widerrufen Der Nutzer hat möglicherweise auch Berechtigungen für andere Objekte oder Rollenzuweisungen, die das Löschen verhindern.
So listen Sie die Rollenzugehörigkeiten 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 Rollenzuweisung:
REVOKE ROLE_NAME FROM USERNAME;Ersetzen Sie ROLE_NAME durch die Rollenzuweisung, die Sie widerrufen möchten.
So heben Sie Berechtigungen für eine Tabelle auf:
Weisen Sie dem ausführenden Nutzer die Rolle „Tabelleninhaber“ zu:
GRANT TABLE_OWNER TO EXECUTOR_USER;Ersetzen Sie Folgendes:
TABLE_OWNER: Nutzername oder Rolle, der bzw. die die Tabelle besitzt.EXECUTOR_USER: Nutzername des ausführenden Nutzers, z. B.postgres.
Berechtigungen für die Tabelle aufheben:
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: Name der Tabelle.USERNAME: Name des Nutzers, dessen Berechtigungen Sie widerrufen möchten.
Datenbanknutzer löschen
Bevor Sie einen Nutzer löschen, müssen Sie alle seine Objekte löschen oder neu zuweisen und alle Berechtigungen widerrufen, die dem Nutzer für andere Objekte gewährt wurden. 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 für den Nutzer 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 Nutzers.CLUSTER_ID: ID des Clusters, zu dem der Nutzer gehört.REGION_ID: ID der Region, in der sich der Cluster befindet. Beispiel:us-central1.