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:
|
1 2 |
sudo apt-get update sudo apt-get install postgresql postgresql-contrib |
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:
|
1 |
sudo su - postgres |
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:
|
1 |
psql |
Führen Sie dann Folgendes aus, um die Rollen anzuzeigen:
|
1 |
\du |

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:
|
1 |
CREATE ROLE demo_role; |
Um zu überprüfen, ob sie erstellt wurde, führen Sie den Befehl aus:
|
1 |
\du |

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:
|
1 |
\q |
Sie können eine Rolle namens “test” mit dem folgenden Befehl erstellen:
|
1 |
createuser test |
Sobald Sie den obigen Befehl ausgeführt haben, melden Sie sich bei psql an und listen Sie die Rollen mit den folgenden Befehlen auf:
|
1 2 |
psql \du |

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:
|
1 |
DROP ROLE role_name; |
Sie können die zuvor erstellte Demo-Rolle mit dem folgenden Befehl löschen:
|
1 |
DROP ROLE demo_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:
|
1 |
DROP ROLE demo_role; |

Wenn Sie möchten, dass der Befehl keinen Fehler ausgibt, wenn die Rolle nicht existiert, können Sie ‘IF EXISTS’ im Befehl hinzufügen:
|
1 |
DROP ROLE IF EXISTS role_name; |
Sie können das Löschen der Rolle mit diesem Befehl erneut versuchen:
|
1 |
DROP ROLE IF EXISTS demo_role; |
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:
|
1 |
CREATE ROLE role_name WITH optional_permissions; |
Um die Optionen hierfür anzuzeigen, können Sie die Hilfe mit diesem Befehl öffnen:
|
1 |
\h CREATE ROLE |

Wenn Sie eine Rolle mit Login-Berechtigungen erstellen möchten, können Sie den Befehl wie folgt formulieren:
|
1 |
CREATE ROLE demo_role WITH LOGIN; |

Wie wir bereits gesehen haben, können Sie auch den folgenden Befehl verwenden, wenn Sie Rollen mit Login-Berechtigung erstellen möchten:
|
1 |
CREATE USER role_name; |
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:
|
1 |
ALTER ROLE role_name WITH attribute_options; |
Wenn Sie beispielsweise möchten, können Sie die Login-Berechtigungen der demo_role mit diesem Befehl auf ‘log in’ ändern:
|
1 |
ALTER ROLE demo_role WITH NOLOGIN; |

Um dem Benutzer die erneute Anmeldung zu ermöglichen, können Sie die Berechtigungen mit dem folgenden Befehl ändern:
|
1 |
ALTER ROLE demo_role WITH LOGIN; |
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:
|
1 |
\password test |
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:
|
1 2 |
\q exit |
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:
|
1 |
psql -U <span class="highlight">user</span> -d <span class="highlight">db</span> -h 127.0.0.1 -W |
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:
|
1 |
psql -U test -d postgres -h 127.0.0.1 -W |

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:
|
1 2 3 |
\q sudo su - postgres psql |
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:
|
1 |
GRANT permission_type ON table_name TO role_name; |
Sie können eine einfache Tabelle erstellen, um den Befehl auszuführen:
|
1 2 3 4 |
CREATE TABLE demo ( name varchar(25), id serial, start_date date); |
Um die erstellte Tabelle anzuzeigen, führen Sie folgenden Befehl aus:
|
1 |
\d |

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:
|
1 |
GRANT UPDATE ON demo TO demo_role; |
Sie können einer Rolle alle Berechtigungen erteilen, indem Sie die Berechtigung als ‘ALL’ angeben:
|
1 |
GRANT ALL ON demo TO demo_role; |
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:
|
1 |
GRANT INSERT ON demo TO PUBLIC; |
Sie können alle erteilten Berechtigungen mit dem folgenden Befehl anzeigen:
|
1 |
\z |
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:
|
1 |
REVOKE permission_type ON table_name FROM user_name; |
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:
|
1 |
REVOKE INSERT ON demo FROM PUBLIC; |
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:
|
1 2 3 |
CREATE ROLE temporary_role; GRANT temporary_role TO demo_role; GRANT temporary_role TO test_user; |
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:
|
1 |
\du |

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:
|
1 |
SET ROLE temporary_role; |
Alle Tabellen, die Sie jetzt erstellen, gehören temporary_role:
|
1 2 3 4 |
CREATE TABLE hello ( name varchar(25), id serial, start_date date); |
Um die Besitzverhältnisse der Tabelle zu überprüfen, führen Sie folgenden Befehl aus:
|
1 |
\d |

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:
|
1 |
RESET ROLE; |
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:
|
1 |
ALTER ROLE test_user INHERIT; |
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:
|
1 |
DROP ROLE temporary_users; |

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:
|
1 |
ALTER TABLE hello OWNER TO demo_role; |
Sie können mit dem folgenden Befehl überprüfen, ob temporary_role jetzt keine Tabellen mehr besitzt:
|
1 |
\d |

Sie können die Rolle ‘temporary_role’ jetzt löschen, da sie keine Abhängigkeiten mehr hat:
|
1 |
DROP ROLE temporary_users; |
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!


Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.