PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verwalten von Rollen und Rollenattributen in PostgreSQL


Einführung

PostgreSQL verwendet verschiedene Mechanismen, um Authentifizierung, Autorisierung und Objektbesitz innerhalb von Datenbankclustern zu implementieren. Der Kern davon ist das Konzept der Rollen.

PostgreSQL-Rollen sind eine Kombination der Ideen von Benutzern und Gruppen in einer einzigen, flexiblen Einheit. Sie sind die Persona, die Benutzer innerhalb des Datenbanksystems annehmen, sind die Entität, durch die das Authentifizierungssystem Verbindungen akzeptiert oder ablehnt, und Gegenstand von Privilegienverwaltungsregeln aller Bereiche.

In diesem Leitfaden wird erläutert, was Rollen sind und wie sie in einem PostgreSQL-Datenbankcluster verwaltet werden. Genauer gesagt behandelt dieser Leitfaden die Rollenverwaltung in Bezug auf Rollenattribute. Einen breiteren Überblick darüber, wie Rollen in das Gesamtbild passen, finden Sie im Einführungsleitfaden zur Authentifizierung und Autorisierung. Informationen zum Ändern von Rollenberechtigungen für bestimmte Datenbankobjekte finden Sie in unserem Leitfaden zu Rollenzuweisungen.



Was sind Rollen?

In PostgreSQL ist eine Rolle eine Gruppierung eines bestimmten Satzes von Fähigkeiten, Berechtigungen und "eigenen" Entitäten. Anstatt unterschiedliche Konzepte von „Benutzern“ und „Gruppen“ zu haben, verwendet PostgreSQL Rollen, um diese beiden Ideen darzustellen. Eine Rolle kann einer einzelnen Person in der realen Welt entsprechen oder als Gruppe mit bestimmten Zugriffsrechten fungieren, denen andere Rollen angehören können.

Rollen sind der Ankerpunkt in PostgreSQL, der bestimmt, für wen Authentifizierungs- und Autorisierungsrichtlinien gelten. Jede Richtlinie, die nicht universell gilt, erfordert einen Identitätsbegriff, um zu definieren, wen sie einschränken und wen sie zulassen soll. In PostgreSQL wird diese Identität durch Rollen repräsentiert.

Das Authentifizierungssystem von PostgreSQL besteht aus einer Reihe unterschiedlicher Komponenten, die jeweils an Rollen gebunden sind. Um für die initiale Verbindung zum Datenbank-Cluster verwendet zu werden, müssen Rollen zunächst den LOGIN haben Attributsatz. Die Authentifizierungsregeln selbst werden in der Host-basierten Konfigurationsdatei namens pg_hba.conf definiert . Jede Regel definiert Authentifizierungsmethoden, die auf die einzelne Rolle beschränkt werden können. Für Rollen, die für die Kennwortauthentifizierung konfiguriert sind, muss ein Kennwortattribut festgelegt sein, damit das System das angegebene Benutzerkennwort validieren kann.

In Bezug auf die Autorisierung werden Rollen auf Datenbank-Cluster-Ebene definiert, was in PostgreSQL bedeutet, dass sie zwischen Datenbanken geteilt werden. Da Rollen Datenbanken umfassen, steuert das Autorisierungssystem die Zugriffsebene, die jede Rolle auf jede Datenbankentität hat. Da Rollen Personengruppen repräsentieren können, gibt es eine große Flexibilität bei der Konfiguration des Zugriffs.

Rollen sind auch für das Konzept des Objektbesitzes in PostgreSQL von wesentlicher Bedeutung. Beispielsweise ist für jede Datenbank und Tabelle genau eine Rolle als Eigentümer konfiguriert. Anders als superusers , ist die Eigentümerrolle die einzige Rolle, die das eigentliche Objekt ändern oder löschen kann.

Zusammenfassend sind Rollen der Kern der meisten praktischen Datenbankoperationen. Ihre Flexibilität ermöglicht es ihnen, sowohl als Benutzerkennungen als auch als Benutzerklassen zu fungieren. Jede Aktion innerhalb des Datenbank-Clusters wird anhand der Berechtigungen der Rolle geprüft, und der Erfolg jeder Verbindung zum Datenbank-Cluster wird durch die Rolle bestimmt, bei der man sich authentifiziert. Es ist wichtig, die Rollenverwaltung gut in den Griff zu bekommen, da sie für so viele Kernoperationen von Bedeutung ist.



Rollenattribute

Rollenattribute sind Flags auf der Rolle selbst, die einige der Kernberechtigungen bestimmen, die sie auf Datenbank-Cluster-Ebene hat. Diese können beim erstmaligen Anlegen der Rolle gesetzt oder jederzeit von jeder Rolle mit den entsprechenden Attributen geändert werden (SUPERUSER oder CREATEROLE in diesem Fall).

Zu den Attributen, die auf eine Rolle angewendet werden können, gehören:

  • LOGIN :Ermöglicht Benutzern, sich anfänglich mit dieser Rolle mit dem Datenbank-Cluster zu verbinden. Der CREATE USER Der Befehl fügt dieses Attribut automatisch hinzu, während CREATE ROLE Befehl nicht.
  • SUPERUSER :Ermöglicht der Rolle, alle Berechtigungsprüfungen zu umgehen, mit Ausnahme des Anmelderechts. Nur andere SUPERUSER Rollen können Rollen mit diesem Attribut erstellen.
  • CREATEDB :Erlaubt der Rolle, neue Datenbanken zu erstellen.
  • CREATEROLE :Ermöglicht der Rolle, andere Rollen zu erstellen, zu ändern und zu löschen. Dieses Attribut ermöglicht es der Rolle auch, die Rollenmitgliedschaft zuzuweisen oder zu ändern. Eine Ausnahme bildet eine Rolle mit dem CREATEROLE Attribut kann SUPERUSER nicht ändern Rollen, ohne auch den SUPERUSER zu haben Attribut.
  • REPLICATION :Ermöglicht der Rolle, die Streaming-Replikation zu initiieren. Rollen mit diesem Attribut müssen auch den LOGIN haben Attribut.
  • PASSWORD :Weist der Rolle ein Passwort zu, das mit password verwendet wird oder md5 Authentifizierungsmechanismen. Dieses Attribut akzeptiert ein Passwort in Anführungszeichen als Argument direkt nach dem Attribut keyword.
  • INHERIT :Legt fest, ob die Rolle die Berechtigungen von Rollen erbt, denen sie angehört. Ohne INHERIT , Mitglieder müssen SET ROLE verwenden in die andere Rolle zu wechseln, um auf diese exklusiven Privilegien zuzugreifen. Dieses Attribut ist standardmäßig für neue Rollen gesetzt.

Weitere Informationen zu Rollenattributen finden Sie in der PostgreSQL-Dokumentation zu Rollenattributen und CREATE ROLE Befehl.



Was ist ein superusers Rolle?

Wie oben kurz erwähnt, ein spezielles Privileg namens superuser ermöglicht uneingeschränkten administrativen Zugriff auf den Datenbank-Cluster. Dies ähnelt dem root Konto in Linux und Unix-ähnlichen Betriebssystemen, aber auf Datenbankebene.

Es muss immer mindestens eine Rolle mit superuser vorhanden sein Berechtigungen in jedem Datenbank-Cluster. Der anfängliche superusers Konto wird während des Installationsvorgangs erstellt. Der Name des anfänglichen superusers Das Konto kann je nach Installationsprozess variieren, aber meistens heißt dieses Konto postgres .

Es wird nicht empfohlen, Ihre tägliche Arbeit mit einem Konto mit superuser zu erledigen Privilegien, sowohl wegen seines Potenzials für destruktive Aktionen als auch um die Möglichkeit zu minimieren, ein Konto mit breitem Zugriff zu kompromittieren. Stattdessen sollten Benutzer meistens Konten verwenden, die den spezifischen Funktionen oder Datenobjekten zugeordnet sind, mit denen sie arbeiten, und nur den superuser verwenden Konten, wenn ein leistungsfähigerer Zugriff erforderlich ist.



Bestehende Rollenattribute prüfen

Nachdem Sie nun eine allgemeine Vorstellung davon haben, was Rollenattribute sind und welche Arten von Berechtigungen sie zulassen, sollten Sie lernen, wie Sie die Attribute finden, die in PostgreSQL auf Rollen angewendet werden. Dieser Abschnitt zeigt Ihnen einige Befehle, die Ihnen dabei helfen, die Attribute zu finden, die für Rollen im Allgemeinen und für Ihre eigene aktuelle Rolle im Besonderen festgelegt sind.


Auflistung aller Datenbankrollen und ihrer Attribute

Es gibt verschiedene Möglichkeiten, die Attribute zu überprüfen, die auf Rollen im gesamten System angewendet werden.

Wenn Sie die Datei psql verwenden Befehlszeilenclient können Sie einige hilfreiche Metabefehle nutzen, die es Ihnen ermöglichen, Rollenattributinformationen ohne Abfrage zu erhalten.

Der \du meta-Befehl zeigt alle Rollen und ihre Attribute:

\du
                                   List of roles Role name |                         Attributes                         | Member of-----------+------------------------------------------------------------+----------- postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

In diesem Fall die postgres Rolle ist die Standardrolle mit superuser Berechtigungen, die für diesen Datenbank-Cluster konfiguriert sind.

Das äquivalente SQL zum Auflisten von Rollen (erkennbar durch Übergeben des -E oder --echo-hidden Flag beim Starten von psql ) ist:

SELECT r.rolname, r.rolsuper, r.rolinherit,  r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,  r.rolconnlimit, r.rolvaliduntil,  ARRAY(SELECT b.rolname        FROM pg_catalog.pg_auth_members m        JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)        WHERE m.member = r.oid) as memberof, r.rolreplication, r.rolbypassrlsFROM pg_catalog.pg_roles rWHERE r.rolname !~ '^pg_'ORDER BY 1;

Eine ähnliche Abfrage, die Rollenattributinformationen bereitstellt (ohne die Rollenmitgliedschaftskomponente), finden Sie unten. Wir verwenden das psql Meta-Befehl \x on um die Ergebnisse zur besseren Lesbarkeit hier vertikal auszugeben:

-- turn on vertical display\x onSELECT * FROM pg_roles WHERE rolname !~ '^pg_';-- turn off vertical display\x off
-[ RECORD 1 ]--+---------rolname        | postgresrolsuper       | trolinherit     | trolcreaterole  | trolcreatedb    | trolcanlogin    | trolreplication | trolconnlimit   | -1rolpassword    | ********rolvaliduntil  | rolbypassrls   | trolconfig      | oid            | 10

Wenn Sie nur sehen möchten, welche Rollen der superuser hat -Attribut können Sie explizit nach einer Liste fragen:

SELECT rolname FROM pg_roles WHERE rolsuper;
 rolname---------- postgres(1 row)

Alternativ können Sie alle Benutzer und deren superusers auflisten Status für ein vollständigeres Bild:

SELECT usename,usesuper FROM pg_user;
 usename  | usesuper----------+---------- postgres | t user1    | f(2 rows)

Dieselben Informationen können mithilfe des „Rollen“-Paradigmas von PostgreSQL anstelle des (manchmal mehrdeutigen) „Benutzer“-Overlays mit dieser etwas längeren Abfrage abgerufen werden:

SELECT rolname,rolsuper FROM pg_roles WHERE rolname !~ '^pg_';
 rolname  | rolsuper----------+---------- postgres | t user1    | f(2 rows)


Auflisten Ihrer eigenen Attribute

Wenn Sie die Attribute der Rolle finden möchten, die Sie gerade verwenden, können Sie die Ausgabe einfach filtern.

Bei Verwendung von psql Meta-Befehle können Sie den USER verwenden -Variable, die durch die aktuell verbundene Rolle ersetzt wird. psql verwendet den Doppelpunkt (: ) um Variablen zu interpolieren:

\du :USER
                                   List of roles Role name |                         Attributes                         | Member of-----------+------------------------------------------------------------+----------- postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

Um eine Liste mit den Werten aller möglichen Rollenattribute zu erhalten, können Sie eine Abfrage verwenden, die den Rollennamen mit dem Wert vergleicht, der von CURRENT_ROLE zurückgegeben wird PostgreSQL-Funktion. Auch hier verwenden wir für die Lesbarkeit eine vertikale Ausgabe:

-- First, turn on vertical output\x onSELECT * FROM pg_roles WHERE rolename = CURRENT_ROLE;-- Change back to normal output\x off
-[ RECORD 1 ]--+---------rolname        | postgresrolsuper       | trolinherit     | trolcreaterole  | trolcreatedb    | trolcanlogin    | trolreplication | trolconnlimit   | -1rolpassword    | ********rolvaliduntil  |rolbypassrls   | trolconfig      |oid            | 10

Um nur zu überprüfen, ob Ihre aktuelle Rolle superuser hat Berechtigungen können Sie Folgendes eingeben:

SHOW is_superuser;
 is_superuser-------------- on(1 row)


Prüfen Sie, ob Sie Rollenverwaltungsrechte haben

Um Rollen zu erstellen, zu ändern oder zu löschen, müssen Sie entweder superuser haben oder CREATEROLE Privilegien.

Geben Sie Folgendes ein, um zu überprüfen, welche Rollen im System Rollenverwaltungsberechtigungen haben:

SELECT rolname as "Users who can manage roles" FROM pg_roles WHERE rolsuper OR rolcreaterole;
 Users who can manage roles---------------------------- postgres(1 rows)

Wenn Sie nur wissen möchten, ob Ihre aktuelle Rolle über Rollenverwaltungsrechte verfügt, können Sie stattdessen Folgendes verwenden:

SELECT 'Yes' AS "Can I manage roles?" FROM pg_roles WHERE rolname = :'USER' AND (rolsuper OR rolcreaterole);
 Can I manage roles?--------------------- Yes(1 row)



Rollen erstellen

Sobald Sie überprüft haben, dass Sie über Rechte zur Rollenverwaltung verfügen, können Sie damit beginnen, Rollen in PostgreSQL zu erstellen, zu ändern oder zu entfernen.

Eine Möglichkeit zum Festlegen von Rollenattributen besteht darin, sie beim Erstellen der Rolle zu deklarieren. Auf diese Weise können Sie die Anfangsbedingungen für die Rolle festlegen, aber Sie können sie später noch ändern, wenn Sie die Zugriffsebene der Rolle ändern möchten. Weitere Informationen zur CREATE ROLE finden Sie hier Befehl, den wir verwenden werden, um sich mit der grundlegenden Syntax vertraut zu machen.

Eine Möglichkeit zum Erstellen einer Rolle ist die Befehlszeile. PostgreSQL enthält einen createuser Befehl, der eine Rolle innerhalb des Datenbank-Clusters mit LOGIN erstellt Privilegien.

Die allgemeine Syntax lautet:

createuser <options> <rolename>

Zum Beispiel, um eine Rolle mit dem Namen admin zu erstellen mit superuser Privilegien, während Sie nach einem Passwort gefragt werden, könnten Sie Folgendes eingeben:

createuser --superuser admin

Sie können sich dann mit dem admin anmelden Konto gemäß den in pg_hba.conf beschriebenen Authentifizierungsmethoden Datei.

So erstellen Sie Rollen mit SQL , sieht die allgemeine Syntax so aus:

CREATE ROLE <role>;

Attribute können definiert werden, indem sie nach dem Rollennamen mit WITH angegeben werden :

CREATE ROLE <role> WITH <options>;

Zum Beispiel, um eine Rolle mit dem Namen user1 zu erstellen die sich mit dem Passwort secretpassword anmelden können , könnten Sie Folgendes eingeben:

CREATE ROLE "user1" WITH LOGIN PASSWORD 'secretpassword';

Um stattdessen eine Rolle mit superuser zu erstellen Privilegien (Sie müssen auch ein superusers sein um diesen Befehl erfolgreich auszuführen), die nicht können anmelden (Benutzer muss SET ROLE verwenden um zu dieser Rolle zu wechseln), könnten Sie Folgendes eingeben:

CREATE ROLE "user2" WITH SUPERUSER;


Bestehende Rollen ändern

Um die Attribute vorhandener Rollen zu ändern, können Sie ALTER ROLE verwenden stattdessen befehlen. Wie bei der Rollenerstellung muss auch Ihre aktuelle Rolle entweder superuser haben oder CREATEROLE Privilegien. Benutzer, die diese Rechte nicht haben, können nur die ALTER ROLE verwenden Befehl, ihr eigenes Passwort zu ändern.

Durch das Ändern von Rollen können Sie die einer Rolle zugewiesenen Attribute nach der Erstellung ändern. Dieselben Attribute, die im Abschnitt zur Rollenerstellung erwähnt wurden, können mit ALTER ROLE verwendet werden Syntax. Ein Unterschied besteht darin, dass jeder Attributtyp durch Hinzufügen des NO negiert werden kann Präfix. Um einer Rolle beispielsweise die Anmeldung beim Datenbank-Cluster zu ermöglichen, können Sie ihr den LOGIN zuweisen Attribut. Um diese Fähigkeit zu entfernen, würden Sie die Rolle ändern, indem Sie NOLOGIN angeben .

Die ALTER ROLE Der Befehl ändert nur die explizit erwähnten Attribute. Mit anderen Worten, die ALTER ROLE Befehl gibt Änderungen an zu Attributen, nicht zu einem vollständigen Satz neuer Attribute.

Um user2 zuzulassen Rolle, um sich beim Datenbank-Cluster anzumelden, können Sie Folgendes eingeben:

ALTER ROLE "user2" WITH LOGIN;

Denken Sie daran, dass dies zwar die Möglichkeit zur Anmeldung ermöglicht, die zulässigen Authentifizierungsmethoden jedoch weiterhin von der pg_hba.conf gesteuert werden Datei.

Wenn Sie user2 möchten Um sich stattdessen anmelden, Rollen erstellen und Datenbanken erstellen zu können, können Sie diese drei Attribute durch Leerzeichen getrennt angeben:

ALTER ROLE "user2" WITH LOGIN CREATEROLE CREATEDB;

Um superusers zu widerrufen Status aus einer Rolle (Sie können diesen Befehl nur mit einem anderen superusers ausführen Rolle), geben Sie Folgendes ein:

ALTER ROLE "user2" WITH NOSUPERUSER;

Um das Passwort für eine Rolle zu ändern, können Sie Folgendes eingeben (alle Rollen sollten diesen Befehl für ihre eigene Rolle ausführen können, unabhängig von CREATEROLE oder superuser Privilegien):

ALTER ROLE <role> WITH PASSWORD '<password>';

Obwohl der obige Befehl funktioniert, ist es besser, wenn möglich, psql zu verwenden Meta-Befehl zum Ändern von Passwörtern. Die psql Der Befehl fordert automatisch zur Eingabe eines Kennworts auf und verschlüsselt es, bevor es an den Server gesendet wird. Dadurch wird verhindert, dass vertrauliche Daten in Protokollen preisgegeben werden.

Sie können das Passwort einer Rolle mit psql ändern indem Sie Folgendes eingeben

-- To change your own password\password-- To change the password for another role\password <role>

Sie können auch die ALTER ROLE verwenden Befehl zum Umbenennen einer Rolle:

ALTER ROLE <role> RENAME TO <newrole>

Denken Sie daran, dass Sie Ihre aktuelle Sitzungsrolle nicht umbenennen können.



Rollen löschen

Das Löschen einer vorhandenen Rolle folgt einem ähnlichen Muster wie die vorherigen Befehle. Auch hier müssen Sie CREATEROLE haben oder superuser Berechtigungen zum Ausführen dieser Befehle.

Ein erschwerender Faktor ist, dass Rollen nicht können entfernt werden, wenn sie noch von Objekten in der Datenbank referenziert werden. Das bedeutet, dass Sie alle Objekte, deren Eigentümer die Rolle ist, löschen oder übertragen müssen. Anschließend müssen Sie auch alle zusätzlichen Berechtigungen widerrufen, die die Rolle für Datenbankobjekte hat.

Eine ausführliche Erläuterung, wie Berechtigungen angemessen neu zugewiesen und gelöscht werden können, wird von Erwin Brandstetter auf der Database Administrators Stack Exchange-Website bereitgestellt. Derselbe Prozess wird unten verwendet.

Zunächst können Sie alle der Rolle gehörenden Objekte mit dem REASSIGNED OWNED neu zuweisen Befehl. Zum Beispiel, wenn Sie sich darauf vorbereiten, user2 zu löschen Rolle können Sie deren Objekte dem postgres zuweisen Rolle durch Eingabe von:

REASSIGN OWNED BY "user2" TO "postgres";

Jetzt gehören die Objekte postgres , können wir den DROP OWNED verwenden Befehl, um alle anderen Privilegien zu widerrufen, die uns für Objekte gewährt wurden. Dieser Befehl löscht auch alle Objekte, die wir besitzen, aber da wir sie gerade in die postgres übertragen haben Rolle, der user2 Rolle hat keine eigenen Objekte mehr. Aus diesem Grund entzieht der Befehl nur zusätzliche Berechtigungen der Rolle:

DROP OWNED BY "user2";

Ohne den DROP OWNED Verknüpfung oben, müssten Sie REVOKE ALL PRIVILEGES ausführen für jedes einzelne Objekt oder jeden Objekttyp, für das die Rolle Berechtigungen hat.

Nachdem Sie alle zugehörigen Berechtigungen widerrufen haben, können Sie die Rolle entfernen, indem Sie Folgendes eingeben:

DROP ROLE "user2";


Anmeldung mit psql

Nachdem Sie eine neue Rolle konfiguriert und die Authentifizierungsdetails mithilfe von pg_hba.conf konfiguriert haben -Datei können Sie sich mit Ihrer neuen Rolle beim Datenbank-Cluster anmelden. Die psql Der Befehlszeilen-Client bietet eine einfache Möglichkeit, dies zu tun.

Standardmäßig psql geht davon aus, dass Sie eine Verbindung mit einer Rolle herstellen möchten, die Ihrem Betriebssystem-Benutzernamen entspricht. Wenn Sie also als john an Ihrem Computer angemeldet sind , psql wird davon ausgehen, dass Sie versuchen möchten, sich mit einer Rolle, die auch john heißt, mit der Datenbank zu verbinden .

Um dieses Verhalten zu überschreiben, können Sie -U übergeben oder --username= Möglichkeit. Wenn Sie sich beispielsweise bei einer Rolle namens kerry anmelden möchten , können Sie Folgendes eingeben:

psql -U kerry

Der Erfolg von psql Der Befehl hängt von der Existenz des kerry ab Rolle, die Erreichbarkeit des Servers, mit dem Sie sich verbinden möchten, und die auf dem Server definierten Authentifizierungsregeln.



Wechsel zu einer anderen Rolle während einer Sitzung

Manchmal möchten Sie möglicherweise vorübergehend die Berechtigungen und die Identität einer anderen Rolle übernehmen, auf die Sie Zugriff haben. Dies ist beispielsweise erforderlich, wenn Sie die Privilegien einer Rolle erlangen möchten, deren Mitglied Sie sind, wenn Ihre aktuelle Rolle nicht über den INHERIT verfügt Attribut.

Um zu verstehen, wie das funktioniert, müssen Sie die Terminologie kennen, die PostgreSQL verwendet, um aktive Rollen zu kategorisieren:

  • Sitzungsrolle :Eine Sitzungsrolle ist die Rolle, mit der Sie sich während Ihrer ersten Verbindung zum PostgreSQL-Datenbankcluster angemeldet haben. Es legt Ihre anfänglichen Privilegien fest und bestimmt Ihren Zugriff auf das System. Diese Rolle muss den LOGIN haben Attribut.
  • Aktuelle Rolle :Im Gegensatz dazu ist die aktuelle Rolle die Rolle, in der Sie gerade agieren. Die mit der aktuellen Rolle verbundenen Berechtigungen, ob direkt festgelegt oder von anderen Rollen geerbt, bestimmen die Aktionen, die Sie ausführen dürfen, und die Objekte, auf die Sie Zugriff haben.

Sie können Ihre Sitzung und aktuelle Rollenwerte anzeigen, indem Sie Folgendes eingeben:

SELECT SESSION_USER, CURRENT_USER;
 current_user | session_user--------------+-------------- postgres     | postgres(1 row)

Während die einzige Möglichkeit, Ihre Sitzungsrolle zu ändern, darin besteht, eine neue Verbindung mit einer anderen Rolle zu starten, können Sie Ihre aktuelle Rolle mit SET ROLE ändern Befehl. Die SET ROLE Der Befehl wird verwendet, um vorübergehend eine andere Rolle zu übernehmen. Der Befehl akzeptiert optional auch die folgenden Modifikatoren:

  • SESSION :Die Standardeinstellung. Dies bewirkt die SET ROLE Befehl, um die gesamte Datenbanksitzung zu beeinflussen.
  • LOCAL :Dieser Modifikator bewirkt, dass der Befehl die Rolle nur für die aktuelle Transaktion ändert.

Um die aktuelle Rolle zu user2 zu ändern Rolle (für den Rest der Sitzung), geben Sie Folgendes ein:

SET ROLE "user2";

Wenn Sie Ihre Sitzung und die aktuellen Rollenwerte überprüfen, werden Sie feststellen, dass sich der aktuelle Rollenwert geändert hat:

SELECT SESSION_USER, CURRENT_USER;
 current_user | session_user--------------+-------------- user2        | postgres(1 row)

Alle Ihre Aktionen verwenden jetzt den user2 Rolle als ihr Kontext.

Um wieder zu der zuvor verwendeten Sitzungsrolle zu wechseln, können Sie Folgendes eingeben:

SET ROLE NONE;

Eine Alternative, die das gleiche Ergebnis erzielt, ist:

RESET ROLE;


Fazit

Das PostgreSQL-System aus Rollen, Rollenattributen, Berechtigungen und Authentifizierung schafft ein flexibles System, mit dem Administratoren Berechtigungen und Datenbankzugriff effektiv verwalten können. In diesem Leitfaden wurde beschrieben, was genau Rollen sind und wie sie ein breites Spektrum an Anwendungsfällen abdecken. Außerdem wurde behandelt, wie Rollen erstellt, geändert und gelöscht und die Rollenattribute verwaltet werden, die ihre globalen Fähigkeiten bestimmen. Das Verständnis, wie diese Identitäten verwaltet werden, ist notwendig, um Ihre Datenbanken zu sichern und Ihren legitimen Benutzern nutzbaren Zugriff zu gewähren.