Übungsaufgaben zu Benutzern und Rechten in SQL (DCL)
https://bildung.social/@oerinformatik/
https://oer-informatik.de/sql-dcl-uebungsaufgaben
SQL, DCL, Berechtigungskonzept, GRANT, REVOKE, Rollen, Prinzip der minimalen Rechte, MariaDB, Übungsaufgaben, Prüfungsvorbereitung
tl/dr; (Bearbeitungszeit insgesamt 108 min, mehrere Aufgaben): Drei Übungsaufgaben zur Rechteverwaltung in MariaDB: Für das Werkstattportal eines Fahrradherstellers überträgst Du ein Einrichtungsskript aus einer PostgreSQL-Anleitung nach MariaDB und richtest Konten ein (Stufe 2), für eine Mitfahr-App entwickelst Du ein Berechtigungskonzept und korrigierst ein fehlerhaftes Skript (Stufe 3), und für eine Freizeit-App prüfst Du vorgefundene Rechte gegen ein Rechtekonzept und korrigierst sie mit Rollen, Spaltenrechten und einer anonymen Auswertungssicht (Stufe 3) [AI-Assisted]. (Zuletzt geändert am 29.10.2026)
Diese Aufgaben gehören zum Artikel SQL: Benutzer und Rechte verwalten (DCL). Dort findest Du alle Befehle, die Du hier brauchst.
Hinweise zur Bearbeitung: Als FIA, FIDP oder ISE musst Du zur Teil-2-Prüfung Aufgaben auf Kernkompetenz-Ebene lösen können, das ist Aufgabe 2.1. Von FIA und FIDP wird zusätzlich erwartet, dass ihnen Aufgaben auf Profilkompetenz-Ebene (Aufgabe 3.1 und Aufgabe 3.2) keine Probleme bereiten. Schreibe die SQL-Anweisungen in MariaDB-Notation (Version 10.11). Bearbeite die Teilaufgaben zuerst selbst und blende erst dann die Lösung ein. Die Punktzahlen helfen Dir, den erwarteten Umfang einzuschätzen.
Du möchtest eigene Aufgaben zum Üben von einem KI-Sprachmodell generieren lassen?
Kopiere den Text in ein KI-Sprachmodell Deiner Wahl und passe Kompetenzstufe, Anzahl, Bearbeitungszeit und Szenario bei Bedarf an. Wie die Aufgaben aufgebaut sind, beschreibt der Artikel Wie sind die Aufgaben aufgebaut?. Prüfe die Ergebnisse mit dem Lehrartikel: KI-Sprachmodelle machen Fehler.
Erstelle neue Übungsaufgaben zum Thema „SQL: Benutzer und Rechte
verwalten (DCL)“.
Bauplan: Halte Dich an Aufbau, Kompetenzstufen, Operatoren,
Anforderungsbereiche, Punkte und Zeitschätzung, die im Artikel
https://oer-informatik.de/aufgaben-aufbau beschrieben sind.
Fachliche Grundlage:
- https://oer-informatik.de/sql-dcl
- https://oer-informatik.de/sql-ddl-basics
- Stilbeispiel: https://oer-informatik.de/sql-dcl-uebungsaufgaben
Die Aufgaben sollen Inhalte zu diesen Schlagwörtern abdecken:
- SQL
- DCL
- Berechtigungskonzept
- GRANT
- REVOKE
- Rollen
- Prinzip der minimalen Rechte
- MariaDB
Kompetenzstufe: Profilkompetenz (alternativ: Basiskompetenz, Kernkompetenz, Expertise)
Anzahl: 1 Aufgabe mit Teilaufgaben
Bearbeitungszeit in Minuten ca.: <5 bis 30 min>
Szenario: eines der Szenarien aus dem Bauplan
Vorgehen:
1. Lies zuerst die verlinkten Artikel. Kannst Du keine Webseiten
abrufen, sag mir das, statt zu raten.
2. Steht bei einer Angabe noch ein Platzhalter in <…>, frag mich
zuerst danach. Richte Punkte und Zahl der Teilaufgaben nach der
Bearbeitungszeit (ca. 0,9 min je Punkt).
3. Gib je Aufgabe Titel mit Kompetenzstufe, Ausgangssituation und
Teilaufgaben mit Operator und Punktzahl aus, dazu die geschätzte
Bearbeitungszeit.
4. Gib die Beispiellösungen mit Punkteverteilung erst aus, wenn ich
danach frage.
Aufgabe 2.1: Datenbankkonten für das Werkstattportal einrichten (Kernkompetenz)
(ca. 27 min Bearbeitungszeit)
Du bist Auszubildende*r bei der CSB-Rad GmbH in Bielefeld. Ab Januar 2027 vergibt die Werkstatt in Sennestadt Reparaturtermine über das neue Werkstattportal. Die Agentur Teutoburg Webwerk GmbH hat die Software entwickelt; sie läuft auf der virtuellen Maschine vm-portal (172.20.41.12). Ihre Daten sollen in der MariaDB-Datenbank werkstattportal auf dem Datenbankserver db-sen liegen. Zusätzlich greifen zwei Annahme-Terminals in der Werkstatt (VLAN 40, Netz 172.20.40.0/24) mit einem eigenen Programm direkt auf die Datenbank zu. Geplant sind diese Tabellen:
| Tabelle | Spalten |
|---|---|
termin |
termin_id, kunde_id, beginn, leistung, status (gebucht, angenommen, abgesagt) |
auftrag |
auftrag_id, termin_id, fahrrad, fehlerbeschreibung, status |
kostenvoranschlag |
kv_id, auftrag_id, betrag_netto, freigegeben_am |
arbeitszeit |
auftrag_id, mechaniker_id, minuten |
bewertung |
bewertung_id, auftrag_id, sterne, kommentar |
Cem Sarıkaya, Geschäftsführer Technik und IT, bittet Dich, die Datenbank und die Konten einzurichten.
a) Erläutere am Beispiel eines Annahme-Terminals, was bei der Authentifizierung und was bei der Autorisierung geprüft wird. (2 Punkte)
Authentifizierung: Beim Verbindungsaufbau prüft MariaDB, ob das Terminal das Konto benutzen darf, mit dem es sich meldet: Kontoname, Passwort und die Adresse, von der die Verbindung kommt (Hostteil, hier ein Rechner im Netz
172.20.40.0/24). (1 Punkt)Autorisierung: Danach prüft MariaDB bei jeder einzelnen Anweisung, ob das Konto sie ausführen darf – zum Beispiel, ob das Terminal den Status eines Termins ändern oder einen Auftrag anlegen darf. (1 Punkt)
b) Jonas Wolff, ebenfalls in der Ausbildung, hat auf db-sen das Einrichtungsskript aus der Installationsanleitung der Agentur ausgeführt:
CREATE DATABASE werkstattportal ENCODING 'UTF8';
CREATE USER wp_app WITH PASSWORD 'Wp!Portal_2027';
GRANT CONNECT ON DATABASE werkstattportal TO wp_app;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO wp_app;MariaDB bricht schon bei der ersten Anweisung ab:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ENCODING 'UTF8'' at line 1
ba) Erkläre, warum das Skript in MariaDB scheitert, und gib für jede der vier Anweisungen an, was in MariaDB anders ist. (4 Punkte)
Die Anleitung ist für PostgreSQL geschrieben. Die Anweisungen sehen ähnlich aus, gehören aber nicht zur MariaDB-Syntax. Je Anweisung 1 Punkt:
ENCODING 'UTF8'kennt MariaDB nicht; dort heißt esCHARACTER SET utf8mb4.WITH PASSWORDheißt in MariaDBIDENTIFIED BY. Außerdem gehört zum Konto ein Hostteil, der festlegt, von wo aus es sich anmelden darf.Ein Recht
CONNECTauf eine Datenbank gibt es in MariaDB nicht. Die Anweisung entfällt: Jedes angelegte Konto darf sich anmelden (USAGE), Rechte auf Daten bekommt es erst mitGRANT.ON ALL TABLES IN SCHEMA publicheißt in MariaDBON werkstattportal.*. Das Recht gilt dann auch für Tabellen, die später angelegt werden.
bb) Schreibe das Skript für MariaDB. Das Konto wp_app soll sich nur von vm-portal aus anmelden und alle Daten des Portals lesen und bearbeiten, aber keine Tabellen anlegen, ändern oder löschen. (4 Punkte)
CREATE DATABASE werkstattportal CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_app'@'172.20.41.12' IDENTIFIED BY 'Wp!Portal_2027';
GRANT SELECT, INSERT, UPDATE, DELETE ON werkstattportal.* TO 'wp_app'@'172.20.41.12';Bewertung: CREATE DATABASE mit dem Namen ohne Hochkommas 1 Punkt (die Zeichensatzangabe ist nicht gefordert), CREATE USER mit Hostteil '172.20.41.12' und Passwort in Hochkommas 1,5 Punkte, GRANT mit genau den vier Datenrechten auf werkstattportal.* 1,5 Punkte. Eine Anweisung für CONNECT gibt es nicht; wer ALL PRIVILEGES vergibt, erhält für das GRANT 0 Punkte, weil das Konto damit auch Tabellen löschen könnte.
Weil der MariaDB-Client beim ersten Fehler abbricht, hat Jonas’ Versuch nichts angelegt; das Skript kann also ohne Aufräumen ausgeführt werden.
c) Für Updates und Fehlersuche bis zur Abnahme bittet die Agentur um folgendes Konto:
CREATE USER 'webwerk'@'%' IDENTIFIED BY 'Tw!Wartung_0127';
GRANT ALL PRIVILEGES ON *.* TO 'webwerk'@'%' WITH GRANT OPTION;Die Mitarbeitenden der Agentur arbeiten über das Fernzugangs-VPN von CSB-Rad und erhalten dort Adressen aus dem Netz 172.20.240.0/24. Beurteile den Wunsch der Agentur und schreibe die Anweisungen für ein Konto webwerk, das alle Rechte auf die Datenbank des Portals hat, aber nicht mehr. (5 Punkte)
Beurteilung (je Punkt 1 Punkt, höchstens 2 Punkte):
ON *.*gilt für alle Datenbanken aufdb-sen, also auch für fremde Daten, und schließt globale Rechte wieCREATE USERein. Die Agentur braucht nurwerkstattportal.WITH GRANT OPTIONerlaubt der Agentur, selbst weitere Konten zu berechtigen; CSB-Rad verliert den Überblick, wer worauf zugreift.'%'erlaubt die Anmeldung von jedem Rechner. Wird das Passwort bekannt, kann es von überall benutzt werden; das VPN-Netz reicht aus.
Anweisungen (3 Punkte):
CREATE USER 'webwerk'@'172.20.240.%' IDENTIFIED BY 'Tw!Wartung_0127';
GRANT ALL PRIVILEGES ON werkstattportal.* TO 'webwerk'@'172.20.240.%';Bewertung: Hostteil auf das VPN-Netz beschränkt 1 Punkt, ALL PRIVILEGES ON werkstattportal.* 1 Punkt, kein WITH GRANT OPTION 1 Punkt. ALL PRIVILEGES ist hier vertretbar, weil die Agentur bei Updates auch Tabellen ändern muss; es gilt aber nur innerhalb dieser einen Datenbank.
d) Cem Sarıkaya schickt Dir seine Wünsche für die übrigen Konten:
„Die beiden Annahme-Terminals melden sich gemeinsam als
wp_terminalan, und zwar nur aus dem Werkstattnetz. Sie zeigen die Termine des Tages, setzen beim Eintreffen der Kundschaft den Status auf ‚angenommen‘ und legen den Reparaturauftrag an. Bastian (Kontobludwig, Hostteil'%', gibt es schon) muss im Portal alles sehen können und erstellt die Kostenvoranschläge, auch Korrekturen gehören dazu. Natalia (Kontonwrobel, gibt es auch schon) schreibt die Rechnungen und braucht dafür die Aufträge und die Kostenvoranschläge. Wer wie lange an einem Rad gearbeitet hat, geht die Buchhaltung nichts an.“
Lege das Berechtigungskonzept fest: Trage in jede Zelle die Rechte ein, die das Konto auf der Tabelle braucht. Eine leere Zelle bedeutet „kein Recht“. (6 Punkte)
| Tabelle | wp_terminal |
bludwig |
nwrobel |
|---|---|---|---|
termin |
|||
auftrag |
|||
kostenvoranschlag |
|||
arbeitszeit |
|||
bewertung |
|||
| Anmeldung von |
| Tabelle | wp_terminal |
bludwig |
nwrobel |
|---|---|---|---|
termin |
SELECT, UPDATE |
SELECT |
|
auftrag |
INSERT |
SELECT |
SELECT |
kostenvoranschlag |
SELECT, INSERT, UPDATE |
SELECT |
|
arbeitszeit |
SELECT |
||
bewertung |
SELECT |
||
| Anmeldung von | 172.20.40.% |
% (vorhanden) |
% (vorhanden) |
Bewertung: je Konto 2 Punkte. Für bludwig ist auch SELECT auf werkstattportal.* richtig. Wer beim Terminal UPDATE nur auf die Spalte status von termin vergibt, setzt die Anforderung noch enger um (volle Punktzahl). SELECT auf auftrag für das Terminal ist vertretbar, wenn es begründet wird. Nicht richtig sind Rechte auf arbeitszeit für nwrobel und DELETE für das Terminal.
e) Gib die SQL-Anweisungen an, mit denen Du das Konzept aus d) umsetzt. Das neue Konto erhält das Passwort Annahme#40_ws. (6 Punkte)
CREATE USER 'wp_terminal'@'172.20.40.%' IDENTIFIED BY 'Annahme#40_ws';
GRANT SELECT, UPDATE ON werkstattportal.termin TO 'wp_terminal'@'172.20.40.%';
GRANT INSERT ON werkstattportal.auftrag TO 'wp_terminal'@'172.20.40.%';
GRANT SELECT ON werkstattportal.* TO 'bludwig';
GRANT INSERT, UPDATE ON werkstattportal.kostenvoranschlag TO 'bludwig';
GRANT SELECT ON werkstattportal.auftrag TO 'nwrobel';
GRANT SELECT ON werkstattportal.kostenvoranschlag TO 'nwrobel';Bewertung: CREATE USER für das Terminal mit Hostteil und Passwort 1 Punkt, Rechte des Terminals 1 Punkt, Rechte für bludwig 1,5 Punkte, Rechte für nwrobel 1,5 Punkte (zwei Anweisungen, weil GRANT je Anweisung nur ein Objekt kennt), kein erneutes CREATE USER für die vorhandenen Konten 1 Punkt.
'bludwig' steht für 'bludwig'@'%'. Das Passwort enthält #; in Hochkommas ist das unproblematisch.
f) Nach der Abnahme am 07.01.2027 soll das Konto webwerk aus c) keine Rechte mehr haben und sich nicht mehr anmelden können. Für spätere Wartungen soll es aber erhalten bleiben. Gib die Anweisungen an und dazu die Anweisung, mit der Du das Ergebnis kontrollierst. (3 Punkte)
REVOKE ALL PRIVILEGES ON werkstattportal.* FROM 'webwerk'@'172.20.240.%';
ALTER USER 'webwerk'@'172.20.240.%' ACCOUNT LOCK;
SHOW GRANTS FOR 'webwerk'@'172.20.240.%';Bewertung: REVOKE auf derselben Ebene wie das GRANT (werkstattportal.*) und mit FROM 1 Punkt, Sperren mit ACCOUNT LOCK 1 Punkt (DROP USER erfüllt die Vorgabe nicht, weil das Konto erhalten bleiben soll), Kontrolle mit SHOW GRANTS 1 Punkt. Danach zeigt SHOW GRANTS nur noch GRANT USAGE ON *.* …. Für die nächste Wartung genügen ALTER USER … ACCOUNT UNLOCK und ein neues GRANT.
Aufgabe 3.1: Konten und Rechte für eine Mitfahr-App (Profilkompetenz)
(ca. 46 min Bearbeitungszeit)
Du arbeitest als Auszubildende*r im FIA-Projektteam der Mitfahr-App RatzFahrt am Ratz und Rübe Berufskolleg in Bielefeld. Die App vermittelt Fahrgemeinschaften für Berufsschultage; Flurmonitore zeigen offene Angebote und Gesuche anonym an. Die Daten liegen in der MariaDB-Datenbank ratzfahrt mit den Tabellen klasse, nutzer, haltepunkt, fahrzeug, angebot, gesuch, buchung, bewertung, monitor, fahrt_statistik und der Sicht v_monitor.
Ausschnitt aus der Tabelle nutzer:
| Spalte | Datentyp | Bemerkung |
|---|---|---|
nutzer_id |
INT UNSIGNED |
Primärschlüssel |
pseudonym, vorname, nachname, email_schule |
VARCHAR |
|
geburtsdatum |
DATE |
|
klasse_id |
INT UNSIGNED |
Fremdschlüssel auf klasse |
einwilligung_eltern |
DATE |
Datum der Einwilligung bei Minderjährigen, sonst NULL |
aktiv |
BOOLEAN |
Die Sicht v_monitor liefert nur offene und aktuelle Einträge (keine abgesagten oder vergangenen Fahrten) und nur die Spalten art, ort, treffpunkt, richtung, datum, zeit und plaetze – keine Namen, keine Pseudonyme.
Im Pilotbetrieb haben sich das App-Backend, die Flurmonitor-Player und das Projektteam mit dem Konto root angemeldet. Vor dem Start am 01.02.2027 verlangt die Schul-IT OWL, die die Datenbank betreibt, ein Berechtigungskonzept. Die Personenkonten awolf (Andrea Wolf), tbecker (Thomas Becker), omelnyk (Oksana Melnyk) und jwolff (Jonas Wolff) gibt es bereits, jeweils mit dem Hostteil '%'.
a) Die Schul-IT OWL hat Dir folgenden Auszug aus ihrer Betriebsrichtlinie geschickt:
Schul-IT OWL – Database hosting policy (excerpt)
Every application and every device must connect with its own database account. The account root is reserved for administrators and must never be stored in configuration files of applications or devices.
Accounts receive only the privileges they need for their task (principle of least privilege). Applications must not be able to change the structure of tables.
If several persons need the same privileges, create a role and grant the privileges to the role instead of to each account.
Accounts of devices must be restricted to the network the devices are located in.
Accounts of persons who leave the school must be locked or dropped within one week.
aa) Gib die fünf Vorgaben sinngemäß auf Deutsch wieder. (5 Punkte)
Jede Anwendung und jedes Gerät meldet sich mit einem eigenen Datenbankkonto an. Das Konto
rootist der Administration vorbehalten und darf nie in Konfigurationsdateien von Anwendungen oder Geräten gespeichert werden.Konten erhalten nur die Rechte, die sie für ihre Aufgabe brauchen (Prinzip der minimalen Rechte). Anwendungen dürfen die Struktur von Tabellen nicht ändern können.
Brauchen mehrere Personen dieselben Rechte, wird eine Rolle angelegt; die Rechte werden der Rolle statt jedem einzelnen Konto gegeben.
Konten von Geräten werden auf das Netz beschränkt, in dem sich die Geräte befinden.
Konten von Personen, die die Schule verlassen, werden innerhalb einer Woche gesperrt oder gelöscht.
Bewertung: je Vorgabe 1 Punkt, wenn der Sinn vollständig wiedergegeben ist (bei 1: eigenes Konto und root-Verbot; bei 2: minimale Rechte und keine Strukturänderung). Eine wörtliche Übersetzung ist nicht nötig.
ab) Ordne die Anweisungen CREATE TABLE, GRANT, UPDATE, REVOKE, SELECT und COMMIT jeweils einer Teilsprache von SQL zu (DDL, DML, DQL, DCL oder TCL). (3 Punkte)
| Anweisung | Teilsprache |
|---|---|
CREATE TABLE |
DDL (Data Definition Language) |
GRANT |
DCL (Data Control Language) |
UPDATE |
DML (Data Manipulation Language) |
REVOKE |
DCL |
SELECT |
DQL (Data Query Language); auch „DML“ wird akzeptiert, weil SELECT oft dazu gezählt wird |
COMMIT |
TCL (Transaction Control Language) |
Bewertung: je richtiger Zuordnung 0,5 Punkte.
Andrea Wolf, Datenschutzbeauftragte der Schule und Administratorin der App, hat die Anforderungen notiert:
Das App-Backend läuft auf demselben Server wie die Datenbank und meldet sich als
rf_backendan. Es liest, legt an, ändert und löscht Daten in allen Tabellen der Datenbank. Tabellen ändern darf nur die Administration.Die vier Flurmonitor-Player im VLAN 520 (Netz 10.50.20.0/24) melden sich gemeinsam als
rf_monitoran. Sie dürfen ausschließlich die anonyme Sichtv_monitorlesen.Thomas Becker wertet für den Schulträger die anonyme Monatsstatistik (
fahrt_statistik) aus; verändern darf er sie nicht.Ich und meine Vertretung im Sekretariat, Heike Brinkmann (Konto
hbrinkmann, muss neu angelegt werden), bilden die Verwaltung: Wir sehen Nutzende und Klassen ein und tragen bei Minderjährigen das Datum der Einwilligung der Eltern ein. Andere Daten der Nutzenden dürfen wir nicht ändern.Ich pflege zusätzlich die Haltepunkte (anlegen und ändern) und möchte dieses Recht an meine Vertretung weitergeben können.
Jonas Wolff hat für Tests der Sofortbuchung die Rechte
INSERT,UPDATEundDELETEauf die Tabellebuchungbekommen. Im Produktivsystem soll er dort nichts mehr ändern dürfen.
b) Lege das Berechtigungskonzept nach den Anforderungen 1 bis 5 fest. Verwende für die Verwaltung die Rolle rf_verwaltung. Trage in jede Zelle die Rechte ein, die das Konto oder die Rolle auf dem Objekt direkt erhält; eine leere Zelle bedeutet „kein eigenes Recht“. Gib außerdem die Mitglieder der Rolle an. (8 Punkte)
Objekt in ratzfahrt |
rf_backend |
rf_monitor |
tbecker |
Rolle rf_verwaltung |
awolf (zusätzlich) |
|---|---|---|---|---|---|
alle Tabellen und Sichten (*) |
|||||
nutzer |
|||||
klasse |
|||||
haltepunkt |
|||||
fahrt_statistik |
|||||
Sicht v_monitor |
Mitglieder der Rolle rf_verwaltung: …
Objekt in ratzfahrt |
rf_backend |
rf_monitor |
tbecker |
Rolle rf_verwaltung |
awolf (zusätzlich) |
|---|---|---|---|---|---|
alle Tabellen und Sichten (*) |
SELECT, INSERT, UPDATE, DELETE |
||||
nutzer |
SELECT; UPDATE nur Spalte einwilligung_eltern |
||||
klasse |
SELECT |
||||
haltepunkt |
INSERT, UPDATE mit Weitergaberecht |
||||
fahrt_statistik |
SELECT |
||||
Sicht v_monitor |
SELECT |
Mitglieder der Rolle rf_verwaltung: awolf und hbrinkmann.
Bewertung: rf_backend, rf_monitor und tbecker je 1 Punkt; Rolle auf nutzer 2 Punkte (für UPDATE gibt es den Punkt nur, wenn deutlich wird, dass nur die Einwilligung geändert werden darf; UPDATE auf die ganze Tabelle verstößt gegen Anforderung 4), Rolle auf klasse 1 Punkt, awolf auf haltepunkt mit Weitergaberecht 1 Punkt, Mitglieder 1 Punkt. Wer SELECT auf haltepunkt zusätzlich für Andrea Wolf einträgt, wird nicht abgewertet. Wer die Rechte für rf_backend in jeder Zeile einzeln einträgt statt in der Zeile *, erhält die volle Punktzahl. Ohne Rolle (alle Rechte einzeln an awolf und hbrinkmann) höchstens 2 Punkte für die Verwaltung, weil die Rolle vorgegeben ist.
c) Gib alle SQL-Anweisungen an, die nötig sind, um das Konto rf_monitor mit dem Passwort Fl8r!Mon_27 anzulegen und ihm die Rechte nach Anforderung 2 zu geben. (4 Punkte)
CREATE USER 'rf_monitor'@'10.50.20.%' IDENTIFIED BY 'Fl8r!Mon_27';
GRANT SELECT ON ratzfahrt.v_monitor TO 'rf_monitor'@'10.50.20.%';Bewertung:
CREATE USERmit Konto und Passwort in Hochkommas: 1,5 PunkteHostteil
'10.50.20.%'(Beschränkung auf das VLAN 520, Anforderung 2 und Vorgabe 4 der Richtlinie): 1 Punkt;'%'oder kein Hostteil: 0 Punkte für diesen TeilGRANT SELECT ON ratzfahrt.v_monitor TO …mit demselben Konto: 1,5 Punkte
Ohne Datenbankangabe (ON v_monitor) ist die Anweisung richtig, wenn vorher USE ratzfahrt; ausgeführt wurde. Die Schreibweise '10.50.20.0/255.255.255.0' (Netzmaske) ist ebenfalls korrekt.
d) Gewähre Andrea Wolf die Rechte nach Anforderung 5. (3 Punkte)
GRANT INSERT, UPDATE ON ratzfahrt.haltepunkt TO 'awolf' WITH GRANT OPTION;Bewertung: INSERT, UPDATE 1 Punkt, ON ratzfahrt.haltepunkt TO 'awolf' 1 Punkt, WITH GRANT OPTION 1 Punkt. Kein CREATE USER, weil das Konto bereits existiert. SELECT zusätzlich zu vergeben ist sinnvoll (zum Nachsehen vorhandener Haltepunkte und für UPDATE … WHERE) und wird nicht abgewertet.
e) Entziehe Jonas Wolff die Rechte nach Anforderung 6 und gib die Anweisung an, mit der Du anschließend kontrollierst, welche Rechte sein Konto noch hat. (4 Punkte)
REVOKE INSERT, UPDATE, DELETE ON ratzfahrt.buchung FROM 'jwolff';
SHOW GRANTS FOR 'jwolff';Bewertung: REVOKE mit den drei Rechten 1 Punkt, ON ratzfahrt.buchung 0,5 Punkte, FROM 'jwolff' 1,5 Punkte (mit TO statt FROM: 0 Punkte für diesen Teil), SHOW GRANTS FOR 'jwolff' 1 Punkt.
Das REVOKE muss auf derselben Ebene stehen wie das ursprüngliche GRANT (hier die Tabelle buchung). Wäre das Recht für ratzfahrt.* vergeben worden, ließe es sich nicht für die einzelne Tabelle entziehen. Das Konto jwolff bleibt bestehen; gelöscht würde es erst mit DROP USER, wenn Jonas die Schule verlässt (Vorgabe 5 der Richtlinie).
f) Erstelle die SQL-Anweisungen für Anforderung 4: Lege das Konto hbrinkmann mit dem Passwort Sekr#Einw2027 und die Rolle rf_verwaltung an, gib der Rolle die nötigen Rechte und weise sie beiden Konten so zu, dass sie nach dem Anmelden sofort wirkt. (7 Punkte)
CREATE USER 'hbrinkmann' IDENTIFIED BY 'Sekr#Einw2027';
CREATE ROLE rf_verwaltung;
GRANT SELECT ON ratzfahrt.nutzer TO rf_verwaltung;
GRANT SELECT ON ratzfahrt.klasse TO rf_verwaltung;
GRANT UPDATE (einwilligung_eltern) ON ratzfahrt.nutzer TO rf_verwaltung;
GRANT rf_verwaltung TO 'awolf', 'hbrinkmann';
SET DEFAULT ROLE rf_verwaltung FOR 'awolf';
SET DEFAULT ROLE rf_verwaltung FOR 'hbrinkmann';Bewertung:
CREATE USERfürhbrinkmannmit Passwort: 1 PunktCREATE ROLE rf_verwaltung: 1 PunktSELECTaufnutzerundklassean die Rolle (zwei Anweisungen, weilGRANTje Anweisung nur ein Objekt kennt): 1 PunktUPDATE (einwilligung_eltern) ON ratzfahrt.nutzeran die Rolle: 2 Punkte (UPDATEauf die ganze Tabelle: 0,5 Punkte)Rolle beiden Konten zugewiesen: 1 Punkt
SET DEFAULT ROLEfür beide Konten: 1 Punkt. Ohne diesen Schritt ist die Rolle in MariaDB zugewiesen, aber nicht aktiv; die Konten müssten sie in jeder Sitzung mitSET ROLE rf_verwaltung;einschalten.
Das Passwort enthält #. In Hochkommas ist das unproblematisch; ohne Hochkommas würde MariaDB alles ab # als Kommentar lesen.
g) Jonas Wolff hat für das App-Backend (Anforderung 1) folgendes Skript geschrieben:
CREATE USER 'rf_backend'@'localhost' IDENTIFIED BY Rf#Backend_2027;
GRANT ALL PRIVILEGES ON *.* TO 'rf_backend'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE TO 'rf_backend'@'localhost';
REVOKE DROP ON ratzfahrt.* TO 'rf_backend'@'localhost';Beschreibe vier Fehler im Skript und gib ein korrigiertes Skript an. (5 Punkte)
Zeile 1: Das Passwort steht nicht in Hochkommas. Das ist ein Syntaxfehler; zusätzlich beginnt mit
#in MariaDB ein Kommentar, sodass der Rest der Zeile ignoriert würde.Zeile 2:
ALL PRIVILEGES ON *.*gibt dem Backend alle Rechte auf alle Datenbanken des Servers, auchDROP,ALTERundCREATE USER. Das verstößt gegen das Prinzip der minimalen Rechte und gegen die Vorgabe, dass Anwendungen keine Tabellen ändern dürfen.Zeile 3: Es fehlt das Objekt (
ON ratzfahrt.*).Zeile 4:
REVOKEverlangtFROMstattTO. Außerdem würde das globaleDROPaus Zeile 2 durch einREVOKEauf Datenbankebene nicht entzogen, weil die Ebenen nicht übereinstimmen. Mit einem richtigenGRANTist die Zeile überflüssig.
Korrigiertes Skript:
CREATE USER 'rf_backend'@'localhost' IDENTIFIED BY 'Rf#Backend_2027';
GRANT SELECT, INSERT, UPDATE, DELETE ON ratzfahrt.* TO 'rf_backend'@'localhost';Bewertung: je beschriebenem Fehler 1 Punkt (4 Punkte), korrigiertes Skript 1 Punkt. Als Fehler gilt nicht, dass Benutzername und Host in Hochkommas stehen oder fehlen; beides ist zulässig. Wer Rechte statt auf ratzfahrt.* einzeln auf alle zehn Tabellen und die Sicht vergibt, erhält die volle Punktzahl.
h) Alle Anweisungen aus c) bis f) und das korrigierte Skript aus g) wurden ausgeführt; die Konten haben sich danach neu angemeldet. Beurteile für jede Anweisung, ob sie ausgeführt oder abgelehnt wird, und begründe kurz. (6 Punkte)
| Nr. | Konto | Anweisung |
|---|---|---|
| 1 | rf_monitor (Player 10.50.20.31) |
SELECT ort, treffpunkt, zeit, plaetze FROM ratzfahrt.v_monitor WHERE richtung = 'zur Schule'; |
| 2 | rf_monitor (Player 10.50.20.31) |
SELECT pseudonym FROM ratzfahrt.nutzer; |
| 3 | hbrinkmann |
UPDATE ratzfahrt.nutzer SET einwilligung_eltern = '2026-11-02' WHERE nutzer_id = 8; |
| 4 | hbrinkmann |
UPDATE ratzfahrt.nutzer SET aktiv = FALSE WHERE nutzer_id = 8; |
| 5 | awolf |
GRANT INSERT, UPDATE ON ratzfahrt.haltepunkt TO 'hbrinkmann'; |
| 6 | rf_backend |
ALTER TABLE ratzfahrt.angebot ADD COLUMN notiz VARCHAR(200); |
| Nr. | Ergebnis | Begründung |
|---|---|---|
| 1 | ausgeführt | rf_monitor hat SELECT auf v_monitor und meldet sich aus dem freigegebenen Netz 10.50.20.0/24 an. Rechte auf die Tabellen hinter der Sicht braucht es nicht (die Sicht läuft mit den Rechten der Person, die sie angelegt hat, SQL SECURITY DEFINER). |
| 2 | abgelehnt | kein Recht auf die Tabelle nutzer (SELECT command denied) |
| 3 | ausgeführt | Die Standardrolle rf_verwaltung ist aktiv; sie erlaubt UPDATE der Spalte einwilligung_eltern und SELECT auf nutzer, das für die Bedingung WHERE nutzer_id = 8 nötig ist. |
| 4 | abgelehnt | Das UPDATE-Recht gilt nur für die Spalte einwilligung_eltern, nicht für aktiv. |
| 5 | ausgeführt | awolf besitzt INSERT und UPDATE auf haltepunkt mit WITH GRANT OPTION und darf genau diese Rechte weitergeben. |
| 6 | abgelehnt | rf_backend hat nur SELECT, INSERT, UPDATE, DELETE; für ALTER TABLE fehlt das Recht ALTER (gewollt: Strukturänderungen nur durch die Administration). |
Bewertung: je Zeile 1 Punkt (0,5 Punkte Ergebnis, 0,5 Punkte Begründung).
i) Jonas schlägt vor, den Flurmonitor-Playern einfach SELECT auf die Tabellen angebot, gesuch und haltepunkt zu geben, „dann braucht man die Sicht nicht“. Begründe, warum Andrea Wolf auf der Sicht v_monitor besteht. (3 Punkte)
Mögliche Gründe (je Grund 1 Punkt, höchstens 3 Punkte):
Datenminimierung: Die Tabellen
angebotundgesuchenthalten die IDs der Fahrer*innen und Mitfahrenden (fahrer_id,nutzer_id) und damit Personenbezug; die Sicht liefert nur die anonymen Spalten, die die Monitore brauchen (DSGVO Art. 5 Abs. 1 lit. c, Datenschutz durch Technikgestaltung nach Art. 25).Schadensbegrenzung: Die Player hängen frei zugänglich in Fluren. Werden ihre Zugangsdaten ausgelesen, sind über die Sicht nur ohnehin öffentlich angezeigte Daten erreichbar (Prinzip der minimalen Rechte).
Gefilterte Daten: Die Sicht zeigt nur offene und aktuelle Einträge; abgesagte oder vergangene Fahrten erscheinen gar nicht erst.
Entkopplung: Ändert sich die Tabellenstruktur, wird nur die Sicht angepasst; die Player-Software und ihre Rechte bleiben gleich.
j) Andrea Wolf ist zugleich Datenschutzbeauftragte der Schule und Administratorin der App. Beurteile diese Doppelrolle und mache einen Vorschlag, wie die Aufgaben verteilt werden könnten. (3 Punkte)
Interessenkonflikt (1 Punkt): Die Datenschutzbeauftragte darf nach DSGVO Art. 38 Abs. 6 andere Aufgaben übernehmen, aber nur, wenn diese nicht zu einem Interessenkonflikt führen. Als Administratorin entscheidet Andrea Wolf selbst über Konten, Rechte und Sichten, also über Mittel der Verarbeitung. Als Datenschutzbeauftragte müsste sie genau diese Entscheidungen unabhängig überwachen (Art. 39) – sie würde sich selbst kontrollieren.
Folgen (1 Punkt): Fehler im Berechtigungskonzept fallen bei einer Selbstkontrolle leichter durch. Außerdem bündelt die Doppelrolle sehr weitreichende Rechte bei einer Person, was dem Prinzip der minimalen Rechte und der Funktionstrennung widerspricht.
Vorschlag (1 Punkt): Die Administration übernimmt eine andere Person (z. B. eine Lehrkraft aus dem IT-Bereich oder die Schul-IT OWL). Andrea Wolf bleibt Datenschutzbeauftragte und erhält nur die Leserechte, die sie zur Kontrolle braucht (z. B. auf Sichten und Protokolle). Ebenso vertretbar: Sie bleibt Administratorin, und die Schule benennt eine andere Datenschutzbeauftragte.
Andere schlüssig begründete Vorschläge mit klarer Trennung der Rollen erhalten ebenfalls die volle Punktzahl.
Aufgabe 3.2: Rollen und Rechte nach der Datenübernahme bei Let’s Meet (Profilkompetenz)
(ca. 35 min Bearbeitungszeit)
Du bist Auszubildende*r im Entwicklungsteam der Let’s Meet GmbH in Bielefeld, die eine App für gemeinsame Freizeitaktivitäten betreibt. Die Altdaten aus dem Excel-Export (Tabelle altdaten_import) werden gerade bereinigt und in die neue MariaDB-Datenbank letsmeet übernommen. Die Datenbank enthält unter anderem diese Tabellen:
| Tabelle | Spalten (Auszug) |
|---|---|
benutzer |
benutzer_id, vorname, nachname, email, passwort_hash, geburtsdatum, plz, ort, status (aktiv, gesperrt, geloescht) |
hobby |
hobby_id, bezeichnung, kategorie |
aktivitaet |
aktivitaet_id, titel, hobby_id, ersteller_id, treffpunkt_id, beginn, status (geplant, abgesagt, stattgefunden) |
teilnahme |
aktivitaet_id, benutzer_id, status (u. a. teilgenommen, nicht_erschienen) |
meldung |
meldung_id, melder_id, gemeldet_id, grund, beschreibung, erstellt_am, bearbeitet_am, ergebnis |
altdaten_import, telefon, benutzer_hobby, treffpunkt, bewertung, freundschaft |
… |
Für die Personen gibt es bereits Konten mit dem Hostteil '%': ydemir (Yusuf Demir, Leiter Entwicklung), bsommer (Birgit Sommer, Teamleitung Support und Moderation), arahimi (Amir Rahimi, Support, vertritt in der Moderation), anguyen (Anh Nguyen, UX-Design), cneumann (Clara Neumann, Geschäftsführung) und mkowalczyk (Dr. Marta Kowalczyk, externe Datenschutzbeauftragte). Im Pflichtenheft steht:
Rechtekonzept der Produktivdatenbank
letsmeet
- Das Backend (Konto
lm_api, App-Server10.99.4.20) liest und bearbeitet die Daten aller Tabellen, darf aber keine Tabellen anlegen, ändern oder löschen.- Das Übernahmeskript (Konto
lm_import, läuft nur auf dem Datenbankserver) liest übernommene Zeilen ausaltdaten_importund löscht sie dort; es legt Datensätze inbenutzer,telefonundbenutzer_hobbyan. Nach Abschluss der Übernahme wird es entfernt.- Das Moderationsteam (Birgit Sommer, Amir Rahimi) liest alle Meldungen und trägt das Ergebnis und den Bearbeitungszeitpunkt ein. Um gemeldete Konten zu sperren, ändert es den Status von Benutzer*innen. Von den Benutzerdaten sieht es nur ID, Vorname und Status.
- Für Auswertungen (Clara Neumann, Anh Nguyen) gibt es nur anonyme Zahlen: Anzahl der stattgefundenen Aktivitäten und der Teilnahmen je Hobby-Kategorie und Monat. Weitere Personen sollen später hinzukommen können.
- Die Datenschutzbeauftragte liest die Meldungen und die anonymen Auswertungen.
- Der Leiter Entwicklung verwaltet die Datenbank
letsmeetund vergibt die Rechte an das Team selbst.
Ein Kollege hat vor seinem Wechsel in ein anderes Team bereits Rechte vergeben, aber nichts dokumentiert. SHOW GRANTS liefert für die Konten und die Rolle folgende Zeilen (ohne die Zeilen GRANT USAGE …):
-- SHOW GRANTS FOR 'lm_api'@'10.99.4.20';
GRANT ALL PRIVILEGES ON `letsmeet`.* TO `lm_api`@`10.99.4.20`
-- SHOW GRANTS FOR 'lm_import'@'localhost';
GRANT SELECT, DELETE ON `letsmeet`.`altdaten_import` TO `lm_import`@`localhost`
GRANT INSERT ON `letsmeet`.`benutzer` TO `lm_import`@`localhost`
GRANT INSERT ON `letsmeet`.`telefon` TO `lm_import`@`localhost`
GRANT INSERT ON `letsmeet`.`benutzer_hobby` TO `lm_import`@`localhost`
-- SHOW GRANTS FOR lm_moderation;
GRANT SELECT, UPDATE ON `letsmeet`.`meldung` TO `lm_moderation`
GRANT SELECT (`benutzer_id`, `vorname`, `status`), UPDATE (`status`) ON `letsmeet`.`benutzer` TO `lm_moderation`
-- SHOW GRANTS FOR 'bsommer';
GRANT `lm_moderation` TO `bsommer`@`%`
SET DEFAULT ROLE `lm_moderation` FOR `bsommer`@`%`
-- SHOW GRANTS FOR 'arahimi';
-- (keine weiteren Zeilen)
-- SHOW GRANTS FOR 'cneumann';
GRANT SELECT ON `letsmeet`.`aktivitaet` TO `cneumann`@`%`
GRANT SELECT ON `letsmeet`.`teilnahme` TO `cneumann`@`%`
GRANT SELECT ON `letsmeet`.`hobby` TO `cneumann`@`%`
-- SHOW GRANTS FOR 'anguyen';
GRANT SELECT ON `letsmeet`.* TO `anguyen`@`%`
-- SHOW GRANTS FOR 'mkowalczyk';
GRANT SELECT ON `letsmeet`.`meldung` TO `mkowalczyk`@`%`
-- SHOW GRANTS FOR 'ydemir';
GRANT ALL PRIVILEGES ON *.* TO `ydemir`@`%` WITH GRANT OPTIONa) Prüfe den vorgefundenen Stand gegen das Rechtekonzept. Gib für jedes Konto und für die Rolle an, ob die Rechte passen, und beschreibe jede Abweichung mit der Anforderung, gegen die sie verstößt. (8 Punkte)
| Konto/Rolle | passt? | Abweichung |
|---|---|---|
lm_api |
nein | ALL PRIVILEGES enthält auch CREATE, ALTER, DROP und weitere Strukturrechte; nach Anforderung 1 sind nur SELECT, INSERT, UPDATE, DELETE erlaubt. |
lm_import |
ja | entspricht Anforderung 2 |
Rolle lm_moderation |
teilweise | UPDATE gilt für die ganze Tabelle meldung; nach Anforderung 3 darf die Moderation nur Ergebnis und Bearbeitungszeitpunkt eintragen. Die Rechte auf benutzer passen. |
bsommer |
ja | Rolle zugewiesen und als Standardrolle aktiv |
arahimi |
nein | Rolle lm_moderation fehlt; er kann seine Aufgabe aus Anforderung 3 nicht erledigen. |
cneumann, anguyen |
nein | Rechte direkt auf Tabellen mit Personenbezug (teilnahme enthält benutzer_id, aktivitaet die ersteller_id), bei anguyen sogar auf alle Tabellen mit E-Mail-Adressen und Passwort-Hashes; Anforderung 4 verlangt nur anonyme Zahlen und eine Lösung, die weitere Personen leicht aufnimmt (Rolle). |
mkowalczyk |
teilweise | Meldungen ja, Zugriff auf die anonymen Auswertungen fehlt (Anforderung 5). |
ydemir |
nein | Rechte auf alle Datenbanken des Servers (*.*) statt nur auf letsmeet (Anforderung 6). |
Bewertung: lm_api 1 Punkt, lm_import und bsommer zusammen 1 Punkt, lm_moderation 1,5 Punkte, arahimi 1 Punkt, cneumann/anguyen 1,5 Punkte, mkowalczyk 1 Punkt, ydemir 1 Punkt.
b) Schreibe die SQL-Anweisung, mit der Yusuf Demir die Sicht v_aktivitaet_statistik anlegt. Sie soll je Hobby-Kategorie und Monat (Format 2026-10) die Anzahl der stattgefundenen Aktivitäten und die Anzahl der Teilnahmen mit dem Status teilgenommen liefern. Gib das Ergebnis von SELECT * FROM letsmeet.v_aktivitaet_statistik ORDER BY monat, kategorie; für den folgenden Datenausschnitt an und erläutere, warum Clara Neumann für die Sicht keine Rechte auf die zugrunde liegenden Tabellen braucht. (6 Punkte)
aktivitaet_id |
hobby_id → kategorie |
beginn |
status |
Teilnahmen mit teilgenommen |
|---|---|---|---|---|
| 1 | 6 → Spiele | 2026-09-25 19:00 | stattgefunden | 4 |
| 2 | 1 → Natur | 2026-10-04 10:00 | stattgefunden | 3 |
| 3 | 4 → Sport | 2026-10-21 18:30 | geplant | 0 |
| 6 | 19 → Spiele | 2026-09-27 15:00 | abgesagt | 0 |
| 8 | 3 → Essen | 2026-10-17 18:00 | stattgefunden | 3 |
CREATE VIEW letsmeet.v_aktivitaet_statistik AS
SELECT h.kategorie,
DATE_FORMAT(a.beginn, '%Y-%m') AS monat,
COUNT(DISTINCT a.aktivitaet_id) AS aktivitaeten,
COUNT(t.benutzer_id) AS teilnahmen
FROM letsmeet.aktivitaet a
JOIN letsmeet.hobby h ON h.hobby_id = a.hobby_id
LEFT JOIN letsmeet.teilnahme t
ON t.aktivitaet_id = a.aktivitaet_id AND t.status = 'teilgenommen'
WHERE a.status = 'stattgefunden'
GROUP BY h.kategorie, DATE_FORMAT(a.beginn, '%Y-%m');Ergebnis:
kategorie |
monat |
aktivitaeten |
teilnahmen |
|---|---|---|---|
| Spiele | 2026-09 | 1 | 4 |
| Essen | 2026-10 | 1 | 3 |
| Natur | 2026-10 | 1 | 3 |
Bewertung: Sicht mit Gruppierung und Filter auf stattgefunden 2 Punkte, Zählung der Teilnahmen nur mit teilgenommen (Bedingung im ON des LEFT JOIN oder im WHERE) 1 Punkt, Ergebnis 1 Punkt, Erläuterung 2 Punkte.
Erläuterung: Eine Sicht läuft in MariaDB standardmäßig mit den Rechten der Person, die sie angelegt hat (SQL SECURITY DEFINER). Yusuf Demir darf die Tabellen lesen; Clara Neumann braucht nur SELECT auf die Sicht. So sieht sie die Zahlen, aber keine Namen, E-Mail-Adressen oder Geburtsdaten.
Ein LEFT JOIN stellt sicher, dass auch eine stattgefundene Aktivität ohne Teilnahme mit 0 gezählt wird; mit COUNT(DISTINCT a.aktivitaet_id) zählt jede Aktivität trotz mehrerer Teilnahmezeilen nur einmal.
c) Schreibe ein Skript, das den vorgefundenen Stand an das Rechtekonzept anpasst. Lege für die Auswertungen die Rolle lm_analyse an. Rollen sollen nach der Anmeldung ohne weiteren Befehl wirken. Die Sicht aus b) ist angelegt. (11 Punkte)
-- Backend: nur noch Datenrechte
REVOKE ALL PRIVILEGES ON letsmeet.* FROM 'lm_api'@'10.99.4.20';
GRANT SELECT, INSERT, UPDATE, DELETE ON letsmeet.* TO 'lm_api'@'10.99.4.20';
-- Moderation: UPDATE auf meldung nur für zwei Spalten, Rolle für arahimi
REVOKE UPDATE ON letsmeet.meldung FROM lm_moderation;
GRANT UPDATE (bearbeitet_am, ergebnis) ON letsmeet.meldung TO lm_moderation;
GRANT lm_moderation TO 'arahimi';
SET DEFAULT ROLE lm_moderation FOR 'arahimi';
-- Auswertungen: Tabellenrechte entziehen, Rolle mit Recht auf die Sicht
REVOKE SELECT ON letsmeet.aktivitaet FROM 'cneumann';
REVOKE SELECT ON letsmeet.teilnahme FROM 'cneumann';
REVOKE SELECT ON letsmeet.hobby FROM 'cneumann';
REVOKE SELECT ON letsmeet.* FROM 'anguyen';
CREATE ROLE lm_analyse;
GRANT SELECT ON letsmeet.v_aktivitaet_statistik TO lm_analyse;
GRANT lm_analyse TO 'cneumann', 'anguyen';
SET DEFAULT ROLE lm_analyse FOR 'cneumann';
SET DEFAULT ROLE lm_analyse FOR 'anguyen';
-- Datenschutzbeauftragte
GRANT SELECT ON letsmeet.v_aktivitaet_statistik TO 'mkowalczyk';
-- Leiter Entwicklung: nur noch die Datenbank letsmeet
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'ydemir';
GRANT ALL PRIVILEGES ON letsmeet.* TO 'ydemir' WITH GRANT OPTION;Bewertung: lm_api 2 Punkte (Entzug und neue Vergabe), Spaltenrecht auf meldung statt Tabellenrecht 2 Punkte, arahimi mit Standardrolle 1 Punkt, Auswertungen 3 Punkte (Tabellenrechte entzogen 1 Punkt, Rolle mit Recht auf die Sicht 1 Punkt, Zuweisung mit Standardrolle 1 Punkt), Datenschutzbeauftragte 1 Punkt, ydemir 2 Punkte (Entzug aller Rechte einschließlich Weitergaberecht 1 Punkt, neue Vergabe auf letsmeet.* 1 Punkt).
Hinweise:
REVOKEmuss auf derselben Ebene stehen wie das vorhandeneGRANT: Das Recht vonanguyenaufletsmeet.*lässt sich nicht für einzelne Tabellen entziehen, die drei Tabellenrechte voncneumannnur einzeln.REVOKE ALL PRIVILEGES, GRANT OPTION FROM …entzieht in MariaDB alle Rechte auf allen Ebenen einschließlich des Weitergaberechts; danach werden die Rechte aufletsmeet.*neu vergeben.Ein Konto hat in MariaDB nur eine Standardrolle. Gehört
arahimispäter auch einer zweiten Rolle an, muss er diese mitSET ROLEeinschalten – oder die Rechte werden in einer gemeinsamen Rolle gebündelt.Statt des Einzelrechts kann
mkowalczykauch Mitglied vonlm_analysewerden (dann mitSET DEFAULT ROLE).
d) Die Übernahme der Altdaten ist abgeschlossen. Außerdem soll die Rechtevergabe künftig nur noch durch die Administration erfolgen; Yusuf Demir behält aber alle Rechte auf letsmeet. Gib die nötigen Anweisungen an und beschreibe, was mit den Rechten geschieht, die Yusuf Demir vorher an andere weitergegeben hat. (4 Punkte)
DROP USER 'lm_import'@'localhost';
REVOKE GRANT OPTION ON letsmeet.* FROM 'ydemir';Bewertung: Entfernen des Übernahmekontos 1 Punkt (DROP USER entfernt das Konto mit allen Rechten; ein vorheriges REVOKE ist möglich, aber nicht nötig), Entzug des Weitergaberechts auf derselben Ebene letsmeet.* 2 Punkte, Beschreibung 1 Punkt.
Beschreibung: MariaDB entzieht bei REVOKE GRANT OPTION nicht automatisch die Rechte, die Yusuf Demir vorher weitergegeben hat (kein kaskadierender Entzug). Da SHOW GRANTS nicht anzeigt, wer ein Recht vergeben hat, muss die Administration mit SHOW GRANTS FOR … für die Konten des Teams prüfen, welche Rechte auf letsmeet sie haben, und nicht mehr gewollte Rechte einzeln entziehen.
e) Beurteile, ob die folgenden Anweisungen nach den Korrekturen aus c) und d) ausgeführt oder abgelehnt werden. Begründe jeweils kurz. (5 Punkte)
| Nr. | Konto | Anweisung |
|---|---|---|
| 1 | bsommer |
UPDATE letsmeet.benutzer SET status = 'gesperrt' WHERE benutzer_id = 7; |
| 2 | bsommer |
SELECT vorname, email FROM letsmeet.benutzer WHERE benutzer_id = 7; |
| 3 | anguyen |
SELECT * FROM letsmeet.v_aktivitaet_statistik WHERE monat = '2026-10'; |
| 4 | cneumann |
SELECT COUNT(*) FROM letsmeet.teilnahme; |
| 5 | lm_api |
ALTER TABLE letsmeet.meldung ADD prioritaet TINYINT; |
| Nr. | Ergebnis | Begründung |
|---|---|---|
| 1 | ausgeführt | Über die Standardrolle lm_moderation darf bsommer die Spalte status ändern und benutzer_id lesen. |
| 2 | abgelehnt | Die Spalte email ist für die Rolle nicht freigegeben; die ganze Anweisung wird abgewiesen, auch wenn vorname erlaubt wäre. |
| 3 | ausgeführt | lm_analyse hat SELECT auf die Sicht, und sie ist Standardrolle von anguyen. |
| 4 | abgelehnt | Das Recht von cneumann auf die Tabelle teilnahme wurde in c) entzogen; über die Rolle darf sie nur die Sicht lesen. |
| 5 | abgelehnt | lm_api hat nur SELECT, INSERT, UPDATE, DELETE; für ALTER TABLE fehlt das Recht ALTER. |
Bewertung: je Zeile 1 Punkt (0,5 Punkte Ergebnis, 0,5 Punkte Begründung).
f) Clara Neumann möchte für ein neues Auswertungsprogramm ein Konto mit SELECT auf letsmeet.*: „Dann müssen wir nicht für jede neue Auswertung eine Sicht beantragen.“ Nimm Stellung zu diesem Vorschlag. (4 Punkte)
Mögliche Stellungnahme (Argumente je 1 Punkt, höchstens 3 Punkte; begründetes Fazit 1 Punkt):
Datenminimierung und Datenschutz durch Technikgestaltung (DSGVO Art. 5 Abs. 1 lit. c, Art. 25): Mit
SELECTauf alle Tabellen wären Namen, E-Mail-Adressen, Geburtsdaten, Passwort-Hashes und Meldungen lesbar – auch von Minderjährigen ab 16 Jahren. Für Auswertungen werden diese Daten nicht gebraucht.Zweckbindung: Meldungen und Teilnahmen dürfen nur für die Moderation und den Betrieb der App verwendet werden, nicht beliebig ausgewertet.
Risiko: Ein Auswertungsprogramm speichert Zugangsdaten oft lokal oder in der Cloud; gelangen sie in falsche Hände, sind alle personenbezogenen Daten betroffen.
Auch anonyme Zahlen können Personen erkennbar machen: Bei sehr kleinen Gruppen (z. B. eine Aktivität mit drei Teilnehmenden in Herford) lassen sich Personen unter Umständen zuordnen. Neue Auswertungen sollte deshalb die Datenschutzbeauftragte prüfen.
Fazit: Der Vorschlag ist abzulehnen. Als Kompromiss kann das Entwicklungsteam weitere Sichten bereitstellen, der Rolle lm_analyse das Leserecht darauf geben und das Angebot auf Wunsch zügig erweitern – oder eine pseudonymisierte Auswertungskopie der Datenbank einrichten.
Links und weitere Informationen
SQL: Benutzer und Rechte verwalten (DCL) – der Artikel zu diesen Übungsaufgaben
als Nachschlagewerk: MariaDB-Dokumentation zu GRANT und Rollen
Hinweis zur Nachnutzung als Open Educational Resource (OER)
Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Übungsaufgaben zu Benutzern und Rechten in SQL (DCL)” von oer-informatik.de (H. Stein), Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/sql-dcl-uebungsaufgaben veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/db-sql/sql. Erstellt mit KI-Assistenz; von mir umfassend redaktionell überarbeitet, geprüft und freigegeben. Stand: 29.10.2026.
[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]
