In PostgreSQL dreht sich alles um das Konzept der Rolle .
Bei der ersten Installation von PostgreSQL unter macOS hat das Skript eine Rolle mit Ihrem macOS-Benutzernamen erstellt , mit einer Liste der erteilten Berechtigungen.
Es gibt keine Benutzer in PostgreSQL, nur Rollen .
Durch Ausführen von psql postgres
In Ihrem Terminal melden Sie sich automatisch mit Ihrem macOS-Benutzernamen bei PostgreSQL an und greifen somit auf die erstellte Rolle zu.
In meinem Fall die flaviocopes
Rolle erstellt wurde, und ich kann sie mit \du
sehen Befehl:
Sehen? Ich habe die folgenden Rollenattribute standardmäßig:
Superuser
Create role
Create DB
Replication
Bypass RLS
und ich bin kein Mitglied einer anderen Rolle (dazu später mehr)
Neue Rolle erstellen
Eine neue Rolle wird mit CREATE ROLE
erstellt Befehl:
CREATE ROLE <role>;
Zum Beispiel:
CREATE ROLE testing;
Wir haben eine neue Rolle mit Cannot login
Rollenattribut. Unser neu erstellter Benutzer kann sich nicht anmelden.
Sie können es versuchen, indem Sie \q
eingeben Befehl und dann psql postgres -U testing
, aber Sie sehen diesen Fehler:
Um dieses Problem zu beheben, müssen wir den LOGIN
hinzufügen Rollenattribut bei der Erstellung:
CREATE ROLE <role> WITH LOGIN;
Wenn wir diese Rolle entfernen mit:
DROP ROLE <role>;
und fügen Sie WITH LOGIN
hinzu diesmal:
DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;
Wir können sehen, dass der testing
Rolle kann sich anmelden, weil wir den Cannot login
nicht haben Rollenattribut diesmal:
Versuchen Sie es, indem Sie den Befehl \q
hinzufügen zum Beenden und dann psql postgres -U testing
:
Beachten Sie, dass die Eingabeaufforderung geändert von =#
zu =>
weil wir den Superuser
nicht haben Rollenattribut jetzt.
Hinzufügen eines Passworts zu einer Rolle
Im vorherigen CREATE ROLE
Befehl haben wir eine Rolle ohne Passwort erstellt. Natürlich ist es sehr wichtig, (sichere) Passwörter zu haben. Sie können ein Passwort hinzufügen, indem Sie PASSWORD
verwenden Stichwort:
CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';
BENUTZER ERSTELLEN
Eine alternative Möglichkeit, Rollen mit dem LOGIN
zu definieren Das automatisch hinzugefügte Attribut (das effektiv Benutzer erstellt, die sich anmelden können) ist die Verwendung von CREATE USER
:
CREATE USER <role> PASSWORD '<password>';
Hinzufügen eines Rollenattributs zu einer Rolle
Ein Rollenattribut kann später mit ALTER ROLE
zu einer Rolle hinzugefügt werden Befehl.
Nehmen wir an, wir haben eine Rolle ohne das LOGIN-Attribut erstellt:
CREATE ROLE <username> PASSWORD '<password>';
Wir können es hinzufügen mit:
ALTER ROLE <role> WITH LOGIN;
Integrierte Rollenattribute
Wir haben den LOGIN
gesehen Rollenattribut bereits, um einer Rolle die Anmeldung zu ermöglichen.
Aber was sind andere integrierte Rollenattribute, die wir verwenden können?
LOGIN
/NOLOGIN
:Anmeldung bei PostgreSQL erlauben (oder nicht)SUPERUSER
/NOSUPERUSER
:Superuser-Berechtigungen zulassen (oder nicht). Ein Datenbank-Superuser umgeht andere Berechtigungsprüfungen, mit Ausnahme vonLOGIN
(muss separat erteilt werden).CREATEDB
/NOCREATEDB
:erlauben (oder nicht) die Fähigkeit, neue Datenbanken zu erstellenCREATEROLE
/NOCREATEROLE
:erlauben (oder nicht) die Möglichkeit, neue Rollen zu erstellenCREATEUSER
/NOCREATEUSER
:erlauben (oder nicht) die Möglichkeit, neue Benutzer zu erstellenINHERIT
/NOINHERIT
:erlauben (oder nicht) die Fähigkeit, die Privilegien vererbbar zu machenREPLICATION
/NOREPLICATION
:Replikationsberechtigungen erteilen (oder nicht) (ein fortgeschrittenes Thema, das wir nicht behandeln)
Gruppenrollen
In PostgreSQL gibt es keine Benutzergruppen.
Stattdessen können Sie Rollen mit bestimmten Berechtigungen erstellen und diese Rollen dann anderen Rollen zuweisen.
Rollen erben die Berechtigungen von Rollen, die ihnen gewährt wurden, wenn diese Rollen das INHERIT-Attribut haben.
Erstellen Sie eine Gruppenrolle
Um eine Gruppenrolle zu erstellen, geben Sie
einCREATE ROLE <groupname>;
Die Syntax ist dieselbe wie beim Erstellen einer Rolle.
Nachdem die Gruppenrolle erstellt wurde, können Sie der Gruppenrolle mit GRANT
Rollen hinzufügen :
GRANT <groupname> TO <role>
Beispielsweise können wir ein flavio
erstellen Benutzerrolle, eine „Mitarbeiter“-Gruppenrolle und weisen Sie den Benutzer der Gruppenrolle zu:
CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;
Sie können eine Rolle aus einer Gruppenrolle entfernen mit:
REVOKE <groupname> FROM <username>
Beispiel:
REVOKE employee FROM flavio;
Gruppenrollenattribute
Standardmäßig wird das Hinzufügen einer Rolle zu einer Gruppenrolle nicht Lassen Sie die Rolle Attribute (Berechtigungen) von der Gruppenrolle erben.
Sie müssen die Gruppenrolle mit dem INHERIT
erstellen Attribut.
Angenommen, Sie erstellen die Mitarbeitergruppenrolle und weisen ihr den CREATEDB
zu Attribut:
CREATE ROLE employee WITH CREATEDB INHERIT;
Erstellen Sie nun eine neue Rolle mit INHERIT
:
CREATE ROLE flavio;
GRANT employee TO flavio;