Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
modul:m290_guko:learningunits:lu12:theorie:c_mysql_rollen_berechtigungen [2025/11/16 19:06] gkochmodul:m290_guko:learningunits:lu12:theorie:c_mysql_rollen_berechtigungen [2025/11/16 20:18] (aktuell) gkoch
Zeile 6: Zeile 6:
  
   * in einer einfachen Noten-Datenbank zwei sinnvolle Rollen definieren (Administration und Lernende).   * in einer einfachen Noten-Datenbank zwei sinnvolle Rollen definieren (Administration und Lernende).
-  * mit den Befehlen ''CREATE USER'', ''CREATE ROLE'', ''GRANT'', ''SHOW GRANTS'' in MySQL umgehen.+  * 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.   * erklären, wie das Prinzip der minimalen Privilegien mit Rollen umgesetzt werden kann.
  
 ===== Ausgangslage: Noten-Datenbank ===== ===== Ausgangslage: Noten-Datenbank =====
- 
-Stellen Sie sich eine Datenbank ''noten_db'' vor, in der die Noten aller Lernenden gespeichert sind. Eine zentrale Tabelle dafür ist ''grades''. 
  
 <WRAP center round box 80%> <WRAP center round box 80%>
-<code sql> +Zum Nachvollziehen der Übung laden Sie hier das SQL-Skript herunter, welches eine entsprechende Datenbank mit den Tabellen erzeugt.
-CREATE DATABASE noten_db; +
-USE noten_db;+
  
-CREATE TABLE grades ( +{{ :modul:m290_guko:learningunits:lu12:theorie:noten_db.zip | SQL-File mit Setup einer Noten-Datenbank. }}
-  id INT AUTO_INCREMENT PRIMARY KEY, +
-  student_id INT NOT NULL, +
-  subject_id INT NOT NULL, +
-  grade DECIMAL(3,1) NOT NULL, +
-  graded_at DATE NOT NULL, +
-  CONSTRAINT fk_grades_student +
-    FOREIGN KEY (student_id) REFERENCES students(id) +
-    ON DELETE CASCADE, +
-  CONSTRAINT fk_grades_subject +
-    FOREIGN KEY (subject_id) REFERENCES subjects(id) +
-    ON DELETE CASCADE +
-); +
-</code>+
 </WRAP> </WRAP>
  
-In dieser Tabelle liegen besonders schützenswerte Personendaten (Leistungsbeurteilungen). Entsprechend wichtig ist eine saubere Rechtevergabe.+Stellen Sie sich die Datenbank ''noten_db'' vor, in der die Noten aller Lernenden gespeichert sind. Eine zentrale Tabelle dafür ist ''noten''
 + 
 +{{:modul:m290_guko:learningunits:lu12:theorie:noten_db.drawio.png?800| 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.
  
 ===== Schritt 1: Zwei Rollen definieren ===== ===== Schritt 1: Zwei Rollen definieren =====
Zeile 57: Zeile 46:
 </code> </code>
 </WRAP> </WRAP>
- 
  
 ===== Schritt 2: Rechte an Rollen vergeben (GRANT) ===== ===== Schritt 2: Rechte an Rollen vergeben (GRANT) =====
Zeile 99: Zeile 87:
  
 Sie setzen damit das Prinzip der minimalen Privilegien um: Lernende dürfen genau das, was sie für ihren Zweck benötigen – nicht mehr. Sie setzen damit das Prinzip der minimalen Privilegien um: Lernende dürfen genau das, was sie für ihren Zweck benötigen – nicht mehr.
- 
  
 ===== Schritt 3: Zwei MySQL-Benutzer erstellen ===== ===== Schritt 3: Zwei MySQL-Benutzer erstellen =====
Zeile 105: Zeile 92:
 Jetzt legen Sie genau **zwei MySQL-Benutzer** an: Jetzt legen Sie genau **zwei MySQL-Benutzer** an:
  
-  * ''noten_admin'' – Admin-Benutzer der Noten-Datenbank, +  * ''lehrperson_koch'' – Lehrperson/Administrator der Noten-Datenbank, 
-  * ''lernende'' – gemeinsamer Benutzer für Lernende (für das Unterrichtsbeispiel ist es in Ordnung, dass alle Lernenden darüber alle Noten sehen).+  * ''lernende_caduff'' – Beispiel-Benutzer für Lernende (für das Unterrichtsbeispiel ist es in Ordnung, dass alle Lernenden darüber alle Noten sehen).
  
 <WRAP center round box 80%> <WRAP center round box 80%>
 <code sql> <code sql>
-CREATE USER 'noten_admin'@'%'+CREATE USER 'lehrperson_koch'@'localhost'
   IDENTIFIED BY 'Admin!2025';   IDENTIFIED BY 'Admin!2025';
  
-CREATE USER 'lernende'@'%'+CREATE USER 'lernende_caduff'@'localhost'
   IDENTIFIED BY 'Lernende!2025';   IDENTIFIED BY 'Lernende!2025';
 </code> </code>
Zeile 120: Zeile 107:
 In der Praxis sollten Sie selbstverständlich stärkere und individuelle Passwörter verwenden. Hier geht es um das Prinzip. In der Praxis sollten Sie selbstverständlich stärkere und individuelle Passwörter verwenden. Hier geht es um das Prinzip.
  
-===== Schritt 4: Rollen an Benutzer zuweisen =====+===== Schritt 4: Rollen an Benutzer zuweisen (GRANT) =====
  
 Im nächsten Schritt weisen Sie den Benutzern ihre Rollen zu: Im nächsten Schritt weisen Sie den Benutzern ihre Rollen zu:
Zeile 127: Zeile 114:
 <code sql> <code sql>
 GRANT db_admin GRANT db_admin
-TO 'noten_admin'@'%';+TO 'lehrperson_koch'@'localhost';
  
 GRANT lernende_role GRANT lernende_role
-TO 'lernende'@'%';+TO 'lernende_caduff'@'localhost';
 </code> </code>
 </WRAP> </WRAP>
Zeile 136: Zeile 123:
 Damit gilt: Damit gilt:
  
-  * ''noten_admin'' arbeitet mit allen Rechten der Rolle ''db_admin'', +  * ''lehrperson_koch'' arbeitet mit allen Rechten der Rolle ''db_admin'', 
-  * ''lernende'' arbeitet mit den Leserechten der Rolle ''lernende_role''.+  * ''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. 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.
  
-===== Schritt 5: Rechte kontrollieren (SHOW GRANTS) =====+===== Schritt 5: Standardrollen beim Login aktivieren (SET DEFAULT ROLE) ===== 
 + 
 +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)**: 
 + 
 +<WRAP center round box 80%> 
 +<code sql> 
 +SET DEFAULT ROLE db_admin 
 +TO 'lehrperson_koch'@'localhost'; 
 + 
 +SET DEFAULT ROLE lernende_role 
 +TO 'lernende_caduff'@'localhost'; 
 +</code> 
 +</WRAP> 
 + 
 +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. 
 + 
 +===== Schritt 6: Rechte kontrollieren (SHOW GRANTS) =====
  
 Mit ''SHOW GRANTS'' können Sie überprüfen, welche Rechte ein Benutzer effektiv besitzt. Mit ''SHOW GRANTS'' können Sie überprüfen, welche Rechte ein Benutzer effektiv besitzt.
Zeile 147: Zeile 161:
 <WRAP center round box 80%> <WRAP center round box 80%>
 <code sql> <code sql>
-SHOW GRANTS FOR 'noten_admin'@'%'; +SHOW GRANTS FOR 'lehrperson_koch'@'localhost'; 
-SHOW GRANTS FOR 'lernende'@'%';+SHOW GRANTS FOR 'lernende_caduff'@'localhost';
 </code> </code>
 </WRAP> </WRAP>
  
-Sie sehen dort, welche Rollen zugewiesen wurden und welche Privilegien diese Rollen enthalten.+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.
  
 ===== Verbindung zu Datenschutz (DSG/DSGVO) ===== ===== Verbindung zu Datenschutz (DSG/DSGVO) =====
Zeile 159: Zeile 173:
  
   * **Schutz vor unbefugtem Zugriff**   * **Schutz vor unbefugtem Zugriff**
-    * Nur die Benutzer ''noten_admin'' und ''lernende'' haben Zugriff auf die Noten-Datenbank.+    * Nur die Benutzer ''lehrperson_koch'' und ''lernende_caduff'' haben Zugriff auf die Noten-Datenbank.
   * **Prinzip der minimalen Privilegien**   * **Prinzip der minimalen Privilegien**
-    * ''noten_admin'' darf alles, trägt aber auch volle Verantwortung. +    * ''lehrperson_koch'' darf alles, trägt aber auch volle Verantwortung. 
-    * ''lernende'' darf nur lesen (''SELECT''), keine Noten verändern.+    * ''lernende_caduff'' darf nur lesen (''SELECT''), keine Noten verändern.
   * **Vertraulichkeit und Integrität**   * **Vertraulichkeit und Integrität**
     * Strukturänderungen und Rechteverwaltung sind auf die Admin-Rolle beschränkt.     * Strukturänderungen und Rechteverwaltung sind auf die Admin-Rolle beschränkt.
  • modul/m290_guko/learningunits/lu12/theorie/c_mysql_rollen_berechtigungen.txt
  • Zuletzt geändert: 2025/11/16 20:18
  • von gkoch