Ü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:

Geplante Tabellen der Datenbank werkstattportal
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:

  1. ENCODING 'UTF8' kennt MariaDB nicht; dort heißt es CHARACTER SET utf8mb4.

  2. WITH PASSWORD heißt in MariaDB IDENTIFIED BY. Außerdem gehört zum Konto ein Hostteil, der festlegt, von wo aus es sich anmelden darf.

  3. Ein Recht CONNECT auf eine Datenbank gibt es in MariaDB nicht. Die Anweisung entfällt: Jedes angelegte Konto darf sich anmelden (USAGE), Rechte auf Daten bekommt es erst mit GRANT.

  4. ON ALL TABLES IN SCHEMA public heißt in MariaDB ON 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 auf db-sen, also auch für fremde Daten, und schließt globale Rechte wie CREATE USER ein. Die Agentur braucht nur werkstattportal.

  • WITH GRANT OPTION erlaubt 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_terminal an, 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 (Konto bludwig, Hostteil '%', gibt es schon) muss im Portal alles sehen können und erstellt die Kostenvoranschläge, auch Korrekturen gehören dazu. Natalia (Konto nwrobel, 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)

Rechte auf die Tabellen von werkstattportal (Vorlage)
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:

Auszug 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)

  1. 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.

  2. 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.

  3. If several persons need the same privileges, create a role and grant the privileges to the role instead of to each account.

  4. Accounts of devices must be restricted to the network the devices are located in.

  5. 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)

  1. Jede Anwendung und jedes Gerät meldet sich mit einem eigenen Datenbankkonto an. Das Konto root ist der Administration vorbehalten und darf nie in Konfigurationsdateien von Anwendungen oder Geräten gespeichert werden.

  2. 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.

  3. Brauchen mehrere Personen dieselben Rechte, wird eine Rolle angelegt; die Rechte werden der Rolle statt jedem einzelnen Konto gegeben.

  4. Konten von Geräten werden auf das Netz beschränkt, in dem sich die Geräte befinden.

  5. 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:

  1. Das App-Backend läuft auf demselben Server wie die Datenbank und meldet sich als rf_backend an. Es liest, legt an, ändert und löscht Daten in allen Tabellen der Datenbank. Tabellen ändern darf nur die Administration.

  2. Die vier Flurmonitor-Player im VLAN 520 (Netz 10.50.20.0/24) melden sich gemeinsam als rf_monitor an. Sie dürfen ausschließlich die anonyme Sicht v_monitor lesen.

  3. Thomas Becker wertet für den Schulträger die anonyme Monatsstatistik (fahrt_statistik) aus; verändern darf er sie nicht.

  4. 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.

  5. Ich pflege zusätzlich die Haltepunkte (anlegen und ändern) und möchte dieses Recht an meine Vertretung weitergeben können.

  6. Jonas Wolff hat für Tests der Sofortbuchung die Rechte INSERT, UPDATE und DELETE auf die Tabelle buchung bekommen. 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)

Berechtigungskonzept für RatzFahrt (Vorlage)
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: …

Berechtigungskonzept für RatzFahrt
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 USER mit Konto und Passwort in Hochkommas: 1,5 Punkte

  • Hostteil '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 Teil

  • GRANT 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 USER für hbrinkmann mit Passwort: 1 Punkt

  • CREATE ROLE rf_verwaltung: 1 Punkt

  • SELECT auf nutzer und klasse an die Rolle (zwei Anweisungen, weil GRANT je Anweisung nur ein Objekt kennt): 1 Punkt

  • UPDATE (einwilligung_eltern) ON ratzfahrt.nutzer an die Rolle: 2 Punkte (UPDATE auf die ganze Tabelle: 0,5 Punkte)

  • Rolle beiden Konten zugewiesen: 1 Punkt

  • SET DEFAULT ROLE fü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 mit SET 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)

  1. 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.

  2. Zeile 2: ALL PRIVILEGES ON *.* gibt dem Backend alle Rechte auf alle Datenbanken des Servers, auch DROP, ALTER und CREATE USER. Das verstößt gegen das Prinzip der minimalen Rechte und gegen die Vorgabe, dass Anwendungen keine Tabellen ändern dürfen.

  3. Zeile 3: Es fehlt das Objekt (ON ratzfahrt.*).

  4. Zeile 4: REVOKE verlangt FROM statt TO. Außerdem würde das globale DROP aus Zeile 2 durch ein REVOKE auf Datenbankebene nicht entzogen, weil die Ebenen nicht übereinstimmen. Mit einem richtigen GRANT ist 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)

Anweisungen zur Beurteilung
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 angebot und gesuch enthalten 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:

Tabellen der Datenbank letsmeet (Auszug)
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

  1. Das Backend (Konto lm_api, App-Server 10.99.4.20) liest und bearbeitet die Daten aller Tabellen, darf aber keine Tabellen anlegen, ändern oder löschen.
  2. Das Übernahmeskript (Konto lm_import, läuft nur auf dem Datenbankserver) liest übernommene Zeilen aus altdaten_import und löscht sie dort; es legt Datensätze in benutzer, telefon und benutzer_hobby an. Nach Abschluss der Übernahme wird es entfernt.
  3. 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.
  4. 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.
  5. Die Datenschutzbeauftragte liest die Meldungen und die anonymen Auswertungen.
  6. Der Leiter Entwicklung verwaltet die Datenbank letsmeet und 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 OPTION

a) 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)

Datenausschnitt aus aktivitaet, hobby und teilnahme
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:

  • REVOKE muss auf derselben Ebene stehen wie das vorhandene GRANT: Das Recht von anguyen auf letsmeet.* lässt sich nicht für einzelne Tabellen entziehen, die drei Tabellenrechte von cneumann nur einzeln.

  • REVOKE ALL PRIVILEGES, GRANT OPTION FROM … entzieht in MariaDB alle Rechte auf allen Ebenen einschließlich des Weitergaberechts; danach werden die Rechte auf letsmeet.* neu vergeben.

  • Ein Konto hat in MariaDB nur eine Standardrolle. Gehört arahimi später auch einer zweiten Rolle an, muss er diese mit SET ROLE einschalten – oder die Rechte werden in einer gemeinsamen Rolle gebündelt.

  • Statt des Einzelrechts kann mkowalczyk auch Mitglied von lm_analyse werden (dann mit SET 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)

Anweisungen zur Beurteilung
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 SELECT auf 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.


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]

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: