CodeGym /Kurse /SQL SELF /Erstellen und Verwalten von Rollen: ROLES

Erstellen und Verwalten von Rollen: ROLES

SQL SELF
Level 47 , Lektion 1
Verfügbar

Eine Rolle in PostgreSQL kann entweder einen einzelnen Benutzer oder eine Benutzergruppe darstellen. Sie steuert den Zugriff auf Datenbanken, Tabellen, Schemas und andere Objekte.

Wenn du eine Rolle erstellst, ist sie standardmäßig nicht an einen bestimmten Benutzer oder eine Gruppe gebunden, aber du kannst ihr Eigenschaften und Rechte zuweisen, die zu deinen Aufgaben passen.

Unterschied zwischen Rollen und Benutzern

Und was ist mit Benutzern? Hier darf man nicht durcheinanderkommen. In PostgreSQL gelten Benutzer auch als Rollen, aber mit einem Unterschied: Benutzer haben immer die Möglichkeit, sich einzuloggen. Das heißt, jede Rolle kann ein Benutzer sein, wenn sie das Attribut LOGIN hat. Wenn du eine Rolle nur als Gruppe nutzen oder ihr keinen Login erlauben willst, kannst du das Attribut LOGIN einfach weglassen.

Beispiel:

  • Rolle mit Attribut LOGIN = Benutzer.
  • Rolle ohne LOGIN = Gruppe oder "Service-Rolle".

Rolle erstellen

Zum Erstellen von Rollen nutzt man das Kommando CREATE ROLE. Die Syntax sieht so aus:

CREATE ROLE <rollenname> [WITH] [parameter];

Wobei parameter Eigenschaften der Rolle sind, wie zum Beispiel:

  • LOGIN — Möglichkeit, sich in die Datenbank einzuloggen.
  • CREATEDB — Erlaubnis, Datenbanken zu erstellen.
  • CREATEROLE — Erlaubnis, andere Rollen zu erstellen.
  • SUPERUSER — Vollzugriff (die gefährlichsten Rollen, also vorsichtig damit!).
  • PASSWORD — Passwort für die Authentifizierung.

Schauen wir uns ein Beispiel für das Erstellen einer Benutzerrolle an. Angenommen, du willst einen Benutzer student mit Login-Recht und Passwort anlegen. Dann führst du folgendes Statement aus:

CREATE ROLE student WITH LOGIN PASSWORD 'securePassword123';

Dieser Befehl erstellt eine Rolle mit dem Namen student, die sich mit der Datenbank verbinden kann.

Jetzt erstellen wir die Rolle teachers, die eine Gruppenrolle ist. Eine Gruppenrolle braucht kein LOGIN-Attribut, weil die Benutzer in der Gruppe ihre eigenen Accounts nutzen.

CREATE ROLE teachers;

Rechte an Rollen vergeben

Rollen in PostgreSQL werden erstellt, um Zugriff auf Ressourcen zu gewähren oder einzuschränken. Dafür gibt es die Kommandos GRANT und REVOKE.

Rechte vergeben mit GRANT

Die Syntax des Kommandos:

GRANT <rechte> ON <objekt> TO <rolle>;

Lass uns eine Tabelle courses erstellen und der Rolle teachers Lese- und Schreibrechte auf diese Tabelle geben.

-- Tabelle erstellen
CREATE TABLE courses (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    teacher_id INT
);

-- Zugriff gewähren
GRANT SELECT, INSERT, UPDATE ON courses TO teachers;

Jetzt können alle Benutzer, die zur Rolle teachers gehören, Daten in der Tabelle ansehen, einfügen und ändern.

Rechte entziehen mit REVOKE

Um Rechte zu entziehen, nutzt man das Kommando REVOKE. Die Syntax:

REVOKE <rechte> ON <objekt> FROM <rolle>;

Um der Gruppe teachers das Recht zu nehmen, Daten in der Tabelle courses zu ändern, führe aus:

REVOKE UPDATE ON courses FROM teachers;

Rollenhierarchie: Vererbung

Benutzer können Rechte von einer Gruppenrolle "erben", um das Management zu vereinfachen. Das ist wie das Weitergeben eines "Erbes" von einem Benutzer zum anderen.

Das Schlüsselwort INHERIT erlaubt einer Rolle, Rechte von einer anderen Rolle zu erben. Dieses Verhalten ist standardmäßig aktiv, kann aber geändert werden.

Beispiel:

-- Benutzer `john` zur Gruppe `teachers` hinzufügen
GRANT teachers TO john;

Jetzt bekommt der Benutzer john automatisch alle Rechte, die der Gruppenrolle teachers zugewiesen wurden.

Prüfe die Rechte:

\du john

Wenn du die Vererbung abschalten willst, erstellst du die Rolle mit dem Attribut NOINHERIT.

CREATE ROLE admin NOINHERIT;

Jetzt können Benutzer in der Rolle admin standardmäßig nicht deren Rechte nutzen.

Gruppenrollen für Zugriffsmanagement erstellen

Gruppenrollen machen das Zugriffsmanagement einfacher, besonders in größeren Projekten. Anstatt jedem Benutzer einzeln Rechte zu geben, kannst du Benutzer zu Gruppen hinzufügen und den Gruppen die nötigen Rechte geben.

Hier ein einfaches Beispiel für eine Gruppenrolle. Wir erstellen Gruppen:

  • students — Gruppe für Studierende.
  • teachers — Gruppe für Lehrende.
CREATE ROLE students;
CREATE ROLE teachers;

Weise Benutzer den Gruppen zu:

-- Benutzer john zur Gruppe students hinzufügen
GRANT students TO john;

-- Benutzer jane zur Gruppe teachers hinzufügen
GRANT teachers TO jane;

Wenn du jetzt den Gruppen students und teachers Zugriff auf eine Tabelle gibst, bekommen automatisch alle Mitglieder Zugriff!

Praktische Übung

  1. Erstelle eine Tabelle exams mit den Feldern:
    • id: Primärschlüssel;
    • subject: Text;
    • teacher_id: ID des Lehrenden.
CREATE TABLE exams (
    id SERIAL PRIMARY KEY,
    subject TEXT NOT NULL,
    teacher_id INT
);
  1. Erstelle die Gruppenrollen students und teachers.
CREATE ROLE students;
CREATE ROLE teachers;
  1. Gib der Gruppe teachers Rechte zum Einfügen und Ändern von Daten in der Tabelle exams.
GRANT INSERT, UPDATE ON exams TO teachers;
  1. Gib der Gruppe students nur Leserechte.
GRANT SELECT ON exams TO students;
  1. Erstelle den Benutzer alice und füge sie der Gruppe students hinzu.
CREATE ROLE alice WITH LOGIN PASSWORD 'alicePassword';
GRANT students TO alice;
  1. Prüfe, welche Rechte alice hat, indem du dich mit ihrem Account verbindest.

Jetzt weißt du, wie man Rollen erstellt, ihre Rechte verwaltet und das Admin-Handling mit Gruppenrollen vereinfacht. In der nächsten Vorlesung schauen wir uns an, wie man den Zugriff mit den Kommandos GRANT und REVOKE noch feiner auf Datenbank-, Schema- und Tabellenebene steuern kann.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION