Dies ist eine alte Version des Dokuments!


LU12c: MySQL – Rollen & Berechtigungen im Notenbuch

Sie können …

  • in einer einfachen Noten-Datenbank zwei sinnvolle Rollen definieren (Administration und Lernende).
  • mit den Befehlen CREATE USER, CREATE ROLE, GRANT, SHOW GRANTS und SET DEFAULT ROLE in MySQL umgehen.
  • erklären, wie das Prinzip der minimalen Privilegien mit Rollen umgesetzt werden kann.

Zum Nachvollziehen der Übung laden Sie hier das SQL-Skript herunter, welches eine entsprechende Datenbank mit den Tabellen erzeugt.

SQL-File mit Setup einer Noten-Datenbank.

Stellen Sie sich die Datenbank noten_db vor, in der die Noten aller Lernenden gespeichert sind. Eine zentrale Tabelle dafür ist noten.

 ERD - Crow's Foot mit der Schema der noten_db

Die Datenbank ist mit drei Tabellen aufgebaut: noten, lernende und module und über Fremdschlüssel miteinander verknüpft.

In der Tabelle noten liegen besonders schützenswerte Personendaten (Leistungsbeurteilungen). Entsprechend wichtig ist eine saubere Rechtevergabe.

Wir arbeiten bewusst nur mit zwei Rollen:

  • eine Admin-Rolle für die vollständige Verwaltung der Noten-Datenbank,
  • eine Rolle für Lernende, die alle Noten lesen dürfen (aber nichts verändern).
Rolle Zweck Typische Rechte
db_admin Verwaltung der gesamten Noten-Datenbank alle Rechte auf noten_db.*
lernende_role Lernende sehen alle Noten (Leserechte) SELECT auf Tabellen in noten_db

Zuerst werden die Rollen in MySQL angelegt:

CREATE ROLE db_admin;
CREATE ROLE lernende_role;

Nun legen Sie fest, was die beiden Rollen genau dürfen.

GRANT ALL PRIVILEGES
ON noten_db.*
TO db_admin
WITH GRANT OPTION;

Die Rolle db_admin kann damit:

  • Tabellen anlegen, ändern, löschen,
  • alle Noten lesen, ändern und löschen,
  • Rechte an andere vergeben.

Alle Lernenden sollen alle Noten sehen können, aber keine Noten verändern oder löschen. Dafür erhält die Rolle nur Leserechte (SELECT).

GRANT SELECT
ON noten_db.*
TO lernende_role;

Damit gilt:

  • lernende_role darf alle Daten in noten_db lesen,
  • aber keine Datensätze einfügen, ändern oder löschen,
  • und auch keine Tabellenstruktur verändern.

Sie setzen damit das Prinzip der minimalen Privilegien um: Lernende dürfen genau das, was sie für ihren Zweck benötigen – nicht mehr.

Jetzt legen Sie genau zwei MySQL-Benutzer an:

  • lehrperson_koch – Lehrperson/Administrator der Noten-Datenbank,
  • lernende_caduff – Beispiel-Benutzer für Lernende (für das Unterrichtsbeispiel ist es in Ordnung, dass alle Lernenden darüber alle Noten sehen).
CREATE USER 'lehrperson_koch'@'localhost'
  IDENTIFIED BY 'Admin!2025';
 
CREATE USER 'lernende_caduff'@'localhost'
  IDENTIFIED BY 'Lernende!2025';

In der Praxis sollten Sie selbstverständlich stärkere und individuelle Passwörter verwenden. Hier geht es um das Prinzip.

Im nächsten Schritt weisen Sie den Benutzern ihre Rollen zu:

GRANT db_admin
TO 'lehrperson_koch'@'localhost';
 
GRANT lernende_role
TO 'lernende_caduff'@'localhost';

Damit gilt:

  • lehrperson_koch arbeitet mit allen Rechten der Rolle db_admin,
  • lernende_caduff arbeitet mit den Leserechten der Rolle lernende_role.

Wenn Sie später eine weitere Lehrperson oder einen weiteren Admin hinzufügen, müssen Sie nur einen neuen Benutzer erstellen und ihm oder ihr die passende Rolle zuweisen.

MySQL unterscheidet zwischen:

  • zugewiesenen Rollen (GRANT rolle_x TO benutzer) und
  • aktiven Rollen (die in der Session wirklich wirken).

Viele Tools (z. B. IDEs wie WebStorm) öffnen automatisch neue Verbindungen, ohne SET ROLE … auszuführen. Dann sind zwar Rollen zugewiesen, aber nicht aktiv – und die Datenbank wird nicht korrekt angezeigt („Schema ist nicht introspected“).

Damit die Rolle automatisch beim Login aktiv ist, setzen Sie eine Standardrolle (Default Role):

SET DEFAULT ROLE db_admin
TO 'lehrperson_koch'@'localhost';
 
SET DEFAULT ROLE lernende_role
TO 'lernende_caduff'@'localhost';

Ab jetzt gilt:

  • Wenn sich lehrperson_koch verbindet, ist db_admin automatisch aktiv.
  • Wenn sich lernende_caduff verbindet, ist lernende_role automatisch aktiv.
  • Tools wie WebStorm sehen die Rechte sofort und können noten_db sauber anzeigen.

Mit SHOW GRANTS können Sie überprüfen, welche Rechte ein Benutzer effektiv besitzt.

SHOW GRANTS FOR 'lehrperson_koch'@'localhost';
SHOW GRANTS FOR 'lernende_caduff'@'localhost';

Sie sehen dort, welche Rollen zugewiesen wurden und welche Privilegien diese Rollen enthalten. So können Sie auch im Unterricht gemeinsam kontrollieren, ob die gewünschte Rechtevergabe funktioniert.

Mit diesen zwei Rollen und zwei MySQL-Benutzern setzen Sie zentrale Datenschutzprinzipien um:

  • Schutz vor unbefugtem Zugriff
    • Nur die Benutzer lehrperson_koch und lernende_caduff haben Zugriff auf die Noten-Datenbank.
  • Prinzip der minimalen Privilegien
    • lehrperson_koch darf alles, trägt aber auch volle Verantwortung.
    • lernende_caduff darf nur lesen (SELECT), keine Noten verändern.
  • Vertraulichkeit und Integrität
    • Strukturänderungen und Rechteverwaltung sind auf die Admin-Rolle beschränkt.
    • Lernende können keine Noten manipulieren, sondern nur ansehen.

So entsteht aus wenigen, klar definierten Rollen und Benutzern ein übersichtliches und datenschutzkonformes Berechtigungskonzept für eine Noten-Datenbank.

  • modul/m290_guko/learningunits/lu12/theorie/c_mysql_rollen_berechtigungen.1763320724.txt.gz
  • Zuletzt geändert: 2025/11/16 20:18
  • von gkoch