Zurück zum Blog

Wie Sie Rollen verwenden und Berechtigungen in PostgreSQL verwalten

Wie Sie Rollen verwenden und Berechtigungen in PostgreSQL verwalten

PostgreSQL ist ein Open-Source-DBMS, das wiederum SQL verwendet. Es ist ein sehr mächtiges Werkzeug, das zur Verwaltung von Anwendungen und zum Hosten von Webdaten auf VPS verwendet wird. In diesem Tutorial lernen Sie, wie Sie Berechtigungen in PostgreSQL verwalten. Es wird Ihnen helfen, Ihren Anwendungsrollen die erforderlichen Berechtigungen zuzuweisen. Wir werden dieses Tutorial mit PostgreSQL auf einem Ubuntu 18.04 Cloud-Server auf CloudSigma durchführen.

PostgreSQL installieren

Um PostgreSQL herunterzuladen und zu installieren, führen Sie die folgenden Befehle aus:

Der Installer erstellt einen Standardbenutzer – “Postgres”, unter dem gearbeitet wird. Wir werden diesen Benutzer für den größten Teil dieses Tutorials verwenden. Sie können sich mit diesem Befehl als dieser Benutzer anmelden:

Da PostgreSQL nun installiert ist, lernen Sie, wie es mit Berechtigungen umgeht. Sie können auch unserem Tutorial zur Einrichtung von PostgreSQL auf Ubuntu für eine detaillierte Schritt-für-Schritt-Anleitung des Installationsprozesses folgen.

PostgreSQL-Berechtigungskonzepte

Postgres verwaltet die Berechtigungen über das Konzept von “Rollen”. Bei Rollen gibt es keinen Unterschied zwischen Benutzern und Gruppen. Rollen sind flexibler als das traditionelle Unix-System von Benutzern und Gruppen. Beispielsweise kann eine Rolle als Mitglied einer anderen Rolle agieren und deren Berechtigungen erben.

Anzeigen von Rollen in PostgreSQL

Um die Rollen in PostgreSQL anzuzeigen, müssen Sie sich zuerst mit dem folgenden Befehl an der Eingabeaufforderung anmelden:

Führen Sie dann Folgendes aus, um die Rollen anzuzeigen:

show roles manage permissions in PostgreSQL

Bislang gibt es nur eine Standardrolle mit allen Berechtigungen.

Wie man Rollen in PostgreSQL erstellt

Sie können Rollen für Postgres entweder über die Befehlszeile oder aus der Postgres-Shell heraus erstellen. Sie können die folgenden zwei Ansätze ausprobieren, woraufhin Sie sehen werden, wie Sie Berechtigungen und Zugriffe in PostgreSQL verwalten.

Wie man Rollen aus PostgreSQL heraus erstellt

Der einfachste Weg, Rollen zu erstellen, ist aus der Eingabeaufforderung von Postgres heraus. Sie können dies mit dem folgenden Befehl tun:

Um zu überprüfen, ob sie erstellt wurde, führen Sie den Befehl aus:

create role from prompt

Es wird angegeben, dass die neue Rolle keine Login-Berechtigungen hat. Sie werden später im Tutorial lernen, wie Sie das ändern können.

Wie man Rollen über die Befehlszeile erstellt

Die Alternative zur obigen Methode besteht darin, den Benutzer über die Befehlszeile zu erstellen. Um die PostgreSQL-Eingabeaufforderung zu verlassen, geben Sie Folgendes ein:

Sie können eine Rolle namens “test” mit dem folgenden Befehl erstellen:

Sobald Sie den obigen Befehl ausgeführt haben, melden Sie sich bei psql an und listen Sie die Rollen mit den folgenden Befehlen auf:

creating user from commandline

Sie können feststellen, dass der auf diese Weise erstellte Benutzer nicht dieselben Attribute besitzt.

Wie man Rollen in PostgreSQL löscht

Sie können Rollen in PostgreSQL ganz einfach mit der folgenden Syntax löschen:

Sie können die zuvor erstellte Demo-Rolle mit dem folgenden Befehl löschen:

drop role

Wenn wir versuchen, eine Rolle zu löschen, die nicht existiert, wird einfach ein Fehler ausgegeben. Um das zu sehen, können Sie versuchen, dieselbe Rolle erneut zu löschen:

drop role fail

Wenn Sie möchten, dass der Befehl keinen Fehler ausgibt, wenn die Rolle nicht existiert, können Sie ‘IF EXISTS’ im Befehl hinzufügen:

Sie können das Löschen der Rolle mit diesem Befehl erneut versuchen:

drop role if exists

Wie man Berechtigungen bei der Rollenerstellung definiert

Bislang haben Sie Rollen erstellt und gelöscht. In diesem Abschnitt werden Sie Rollen mit geänderten Berechtigungen erstellen. Sie können dies tun, indem Sie die Berechtigungen für die Rolle mit dem Erstellungsbefehl angeben:

Um die Optionen hierfür anzuzeigen, können Sie die Hilfe mit diesem Befehl öffnen:

help create user

Wenn Sie eine Rolle mit Login-Berechtigungen erstellen möchten, können Sie den Befehl wie folgt formulieren:

create role with login manage permissions in PostgreSQL

Wie wir bereits gesehen haben, können Sie auch den folgenden Befehl verwenden, wenn Sie Rollen mit Login-Berechtigung erstellen möchten:

Der einzige Unterschied zwischen den beiden Befehlen besteht darin, dass ‘CREATE USER’ der Rolle standardmäßig die Login-Berechtigung erteilt.

So ändern Sie die Berechtigungen von Rollen in PostgreSQL

Bisher haben Sie ausprobiert, wie Sie Berechtigungen beim Erstellen des Benutzers vergeben. In diesem Abschnitt werden Sie die Berechtigungen der bereits erstellten Benutzer ändern. Die Syntax für den Alter-Befehl lautet:

Wenn Sie beispielsweise möchten, können Sie die Login-Berechtigungen der demo_role mit diesem Befehl auf ‘log in’ ändern:

alter nologin

Um dem Benutzer die erneute Anmeldung zu ermöglichen, können Sie die Berechtigungen mit dem folgenden Befehl ändern:

So melden Sie sich als anderer Benutzer in PostgreSQL an

PostgreSQL erlaubt Ihnen standardmäßig nur dann eine lokale Anmeldung, wenn Ihr Benutzername mit dem Systembenutzernamen übereinstimmt. Um dies zu umgehen, können Sie entweder den Anmeldetyp ändern oder PostgreSQL so konfigurieren, dass es die Loopback-Netzwerkschnittstelle verwendet. Diese Schnittstelle würde den Verbindungstyp auf Remote ändern, selbst wenn die Verbindung lokal ist.

In diesem Abschnitt werden Sie die zweite Methode ausprobieren. Zu Beginn können Sie das Passwort des Benutzers festlegen, damit eine Authentifizierung möglich ist.

Legen Sie das Passwort des ‘demo_user’ mit dem folgenden Befehl fest:

Geben Sie nach Aufforderung das Passwort ein und bestätigen Sie es. Sobald dies erledigt ist, können Sie die PostgreSQL-Schnittstelle verlassen und zu Ihrem normalen Systembenutzer zurückkehren:

PostgreSQL erfordert, dass Sie sich mit einem Benutzernamen anmelden, der dem Benutzernamen Ihres Betriebssystems entspricht, und dass Sie sich auch mit demselben Benutzernamen mit der Datenbank verbinden. Da Sie dies in diesem Fall nicht tun, müssen Sie die Optionen, die Sie verwenden möchten, explizit angeben. Sie können die folgende Syntax verwenden:

user: Der Benutzername, mit dem Sie sich verbinden möchten
DB: Eine vorhandene Datenbank, auf die Sie Zugriff haben
-h 127.0.0.1: Gibt für PostgreSQL an, dass Sie sich über eine Netzwerkschnittstelle mit dem lokalen Rechner verbinden. Diese Option ermöglicht uns die Authentifizierung, auch wenn der Benutzername nicht mit dem Systembenutzernamen übereinstimmt.
-W: Signalisiert PostgreSQL, dass Sie ein Passwort eingeben werden

Um uns mit unserem “test_user” anzumelden, können wir den folgenden Befehl ausführen:

postgresql login through network interface manage permissions in PostgreSQL

Sobald Sie das Passwort eingegeben haben, sind Sie in der Shell angemeldet. In unserem Beispiel verwenden wir die Datenbank ‘postgres’, die Standarddatenbank, die bei der Installation automatisch eingerichtet wird.

In dieser Sitzung werden Sie, je nach dem für die Anmeldung ausgewählten Benutzer, auf das Problem stoßen, dass Sie nicht über die erforderlichen Berechtigungen verfügen, um verschiedene Aktionen durchzuführen. Der Grund für dieses Problem ist, dass Sie dem Benutzer noch keine ausreichenden Berechtigungen zur Verwaltung erteilt haben.

Im nächsten Abschnitt werden Sie den Benutzern die erforderlichen Berechtigungen erteilen. Zuerst müssen Sie den Benutzer wieder in einen administrativen Benutzer ändern:

Berechtigungen in PostgreSQL verwalten: So erteilen Sie Berechtigungen in PostgreSQL

Wenn in PostgreSQL eine Datenbank oder Tabelle von einer bestimmten Rolle erstellt wird, hat nur diese Rolle die Berechtigung, sie zu ändern. Die Ausnahme hiervon wären Rollen mit Superuser-Berechtigungen. In diesem Abschnitt werden Sie anderen Rollen Berechtigungen erteilen. Sie können anderen Rollen Berechtigungen mit der ‘GRANT’-Anweisung erteilen. Die Syntax lautet:

Sie können eine einfache Tabelle erstellen, um den Befehl auszuführen:

Um die erstellte Tabelle anzuzeigen, führen Sie folgenden Befehl aus:

create table manage permissions in PostgreSQL

Da Sie nun eine Demo-Tabelle haben, können Sie der Rolle ‘demo_role’ Berechtigungen für die Tabelle ‘demo’ erteilen. Mit diesem Befehl können Sie der Rolle das Recht ‘UPDATE’ geben:

Sie können einer Rolle alle Berechtigungen erteilen, indem Sie die Berechtigung als ‘ALL’ angeben:

Wenn Sie allen Rollen im System eine bestimmte Berechtigung erteilen möchten, können Sie anstelle der Rolle das Schlüsselwort ‘public’ verwenden, wie im folgenden Befehl:

Sie können alle erteilten Berechtigungen mit dem folgenden Befehl anzeigen:

granted permissions

Berechtigungen in PostgreSQL verwalten: So entfernen Sie Berechtigungen in PostgreSQL

Sie können Berechtigungen einer Rolle ganz einfach mit dem Befehl ‘REVOKE’ entfernen. Er ist dem Grant-Befehl sehr ähnlich:

Wie bei GRANT können wir die Schlüsselwörter – ‘ALL’ und ‘PUBLIC’ verwenden, um alle Berechtigungen zu erteilen oder Berechtigungen für alle Rollen zu erteilen:

So verwenden Sie Gruppenrollen in PostgreSQL

Um eine umfassende Berechtigungskontrolle zu ermöglichen, sind Rollen flexibel genug, um sie mit anderen Rollen zu gruppieren. Sie können beispielsweise eine Rolle – ‘temporary_role’ erstellen und dieser Rolle dann ‘demo_role’ und ‘test_user’ hinzufügen:

Jetzt können Sie die Berechtigungen dieser beiden Rollen verwalten, indem Sie einfach die Berechtigungen der Rolle ‘temporary_role’ verwalten. Dies ermöglicht eine einfachere Verwaltung von Berechtigungen. Sie können die Informationen zur Rollenmitgliedschaft mit diesem Befehl anzeigen:

role - group manage permissions in PostgreSQL

Jedes Gruppenmitglied kann mithilfe des Befehls ‘set role’ im Namen der Gruppe agieren. Da der Benutzer ‘postgres’ ein Superuser ist, können Sie ‘set role’ auch dann verwenden, wenn Sie kein Mitglied der Gruppe sind:

Alle Tabellen, die Sie jetzt erstellen, gehören temporary_role:

Um die Besitzverhältnisse der Tabelle zu überprüfen, führen Sie folgenden Befehl aus:

create table with temporary_role

Sie können sehen, dass die Rolle ‘temporary_role’ Besitzer der neuen Tabelle und der mit dem Datentyp serial verknüpften Sequenz ist. Um zu den ursprünglichen Rollenberechtigungen zurückzukehren, führen Sie folgenden Befehl aus:

Wenn Sie möchten, dass die Rolle alle Berechtigungen der Rolle hat, zu der sie gehört, können Sie die Eigenschaft ‘inherit’ mit dem Befehl ‘alter role’ angeben:

Mit dem obigen Befehl hat ‘test_user’ alle Berechtigungen der Rollen erhalten, zu denen er gehört. Um eine Rolle zu löschen, können Sie den Befehl ‘drop role’ verwenden:

drop role manage permissions in PostgreSQL

Der obige Befehl wirft einen Fehler auf, da wir einige Objekte haben, wie die Tabelle ‘hello’, die davon abhängen. Um sie zu löschen, können Sie den Besitz der Tabelle auf eine andere Rolle übertragen:

Sie können mit dem folgenden Befehl überprüfen, ob temporary_role jetzt keine Tabellen mehr besitzt:

check ownerships

Sie können die Rolle ‘temporary_role’ jetzt löschen, da sie keine Abhängigkeiten mehr hat:

Obwohl der obige Befehl die Rolle temporary_users löscht, werden die ehemaligen Mitglieder der Rollengruppe nicht entfernt.

Fazit

Sie haben das Tutorial abgeschlossen und wissen nun, wie Sie Berechtigungen in PostgreSQL verwalten. Sie können die Berechtigungen ganz einfach verwalten. Zu wissen, wie man Berechtigungen verwaltet, stellt sicher, dass Ihre Anwendungen Zugriff auf die erforderlichen Datenbanken haben, während sie keinen Zugriff auf andere Datenbanken haben, die von einer anderen Anwendung verwendet werden.

Viel Spaß beim Computing!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev ist ein kreativer Designer bei CloudSigma und konzentriert sich auf eine konsistente Unternehmensidentität durch traditionelle und innovative Marketingkanäle. Er versteht es meisterhaft, künstlerische Vision mit strategischem Marketing zu verbinden, um wirkungsvolle Markengeschichten zu schaffen.

Kommentare

Noch keine Kommentare. Schreiben Sie den ersten.