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

PostgreSQL-Benutzerberechtigungen

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 von LOGIN (muss separat erteilt werden).
  • CREATEDB / NOCREATEDB :erlauben (oder nicht) die Fähigkeit, neue Datenbanken zu erstellen
  • CREATEROLE / NOCREATEROLE :erlauben (oder nicht) die Möglichkeit, neue Rollen zu erstellen
  • CREATEUSER / NOCREATEUSER :erlauben (oder nicht) die Möglichkeit, neue Benutzer zu erstellen
  • INHERIT / NOINHERIT :erlauben (oder nicht) die Fähigkeit, die Privilegien vererbbar zu machen
  • REPLICATION / 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

ein
CREATE 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;