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. DerCREATE USER
Der Befehl fügt dieses Attribut automatisch hinzu, währendCREATE ROLE
Befehl nicht.SUPERUSER
:Ermöglicht der Rolle, alle Berechtigungsprüfungen zu umgehen, mit Ausnahme des Anmelderechts. Nur andereSUPERUSER
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 demCREATEROLE
Attribut kannSUPERUSER
nicht ändern Rollen, ohne auch denSUPERUSER
zu haben Attribut.REPLICATION
:Ermöglicht der Rolle, die Streaming-Replikation zu initiieren. Rollen mit diesem Attribut müssen auch denLOGIN
haben Attribut.PASSWORD
:Weist der Rolle ein Passwort zu, das mitpassword
verwendet wird odermd5
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. OhneINHERIT
, Mitglieder müssenSET 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 dieSET 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.