Kapitel 18. Datenbankrollen und -privilegien
On Oktober 25, 2021 by adminDatenbankrollen sind konzeptionell völlig getrennt von Betriebssystembenutzern. In der Praxis kann es zweckmäßig sein, eine Korrespondenz aufrechtzuerhalten, aber dies ist nicht erforderlich. Datenbankrollen sind global für eine Datenbank-Cluster-Installation (und nicht für jede einzelne Datenbank). Um eine Rolle zu erstellen, verwenden Sie den SQL-Befehl CREATE ROLE:
CREATE ROLE name;
Name folgt den Regeln für SQL-Bezeichner: entweder einfach ohne Sonderzeichen oder in Anführungszeichen. (In der Praxis werden Sie in der Regel zusätzliche Optionen, wie z. B. LOGIN, an den Befehl anhängen wollen. Mehr dazu weiter unten.) Um eine bestehende Rolle zu entfernen, verwenden Sie den analogen DROP ROLE-Befehl:
DROP ROLE name;
Zur Vereinfachung werden die Programme createuser und dropuser als Wrapper um diese SQL-Befehle bereitgestellt, die von der Shell-Befehlszeile aus aufgerufen werden können:
createuser namedropuser name
Um die Menge der bestehenden Rollen zu ermitteln, untersuchen Sie den Systemkatalog pg_roles, zum Beispiel
SELECT rolname FROM pg_roles;
Der Meta-Befehl des psql-Programms \du ist ebenfalls nützlich, um die bestehenden Rollen aufzulisten.
Um das Datenbanksystem zu booten, enthält ein frisch initialisiertes System immer eine vordefinierte Rolle. Diese Rolle ist immer ein „Superuser“ und hat standardmäßig (sofern sie nicht beim Ausführen von initdb geändert wird) denselben Namen wie der Betriebssystembenutzer, der den Datenbank-Cluster initialisiert hat. Normalerweise heißt diese Rolle postgres. Um weitere Rollen zu erstellen, müssen Sie sich zunächst mit dieser ersten Rolle verbinden.
Jede Verbindung zum Datenbankserver wird unter dem Namen einer bestimmten Rolle hergestellt, und diese Rolle bestimmt die anfänglichen Zugriffsrechte für Befehle, die für diese Verbindung ausgegeben werden. Der für eine bestimmte Datenbankverbindung zu verwendende Rollenname wird von dem Client angegeben, der die Verbindungsanforderung auf anwendungsspezifische Weise initiiert. Das Programm psql verwendet beispielsweise die Befehlszeilenoption -U, um die Rolle anzugeben, mit der die Verbindung hergestellt werden soll. Viele Anwendungen nehmen standardmäßig den Namen des aktuellen Betriebssystembenutzers an (einschließlich createuser und psql). Daher ist es oft praktisch, eine Namenskorrespondenz zwischen Rollen und Betriebssystembenutzern aufrechtzuerhalten.
Die Menge der Datenbankrollen, mit denen sich eine gegebene Client-Verbindung verbinden kann, wird durch die Einrichtung der Client-Authentifizierung bestimmt, wie in Kapitel 20 erläutert. (Daher ist ein Client nicht notwendigerweise darauf beschränkt, sich mit der Rolle zu verbinden, die denselben Namen trägt wie sein Betriebssystembenutzer, genauso wie der Anmeldename einer Person nicht mit ihrem echten Namen übereinstimmen muss.) Da die Rollenidentität die Privilegien bestimmt, die einem verbundenen Client zur Verfügung stehen, ist es wichtig, diese sorgfältig zu konfigurieren, wenn Sie eine Mehrbenutzerumgebung einrichten.
Schreibe einen Kommentar