Ich werde in Seminaren, Workshops oder in Kundenprojekten in Sachen MySQL immer mal wieder mit Dingen konfrontiert, auf die ich ad hoc keine Antwort habe bzw. mit denen ich noch keine Erfahrung gesammelt habe.
Das Problem
Im Rahmen einer Übung innerhalb unseres MySQL-Seminars ist ein Kunde in das folgende Problem gelaufen. Er hat ein kleines Rollenkonzept entwickelt und einem User eine Rolle zugewiesen, über die dieser einige Rechte bekommen sollte. Nach dem Login mit dem User-Account standen diese Rechte jedoch nicht zur Verfügung.
Die Lösung
Hier ein kleines Testszenario zur Lösung des Problems. Wir nutzen als Datenbasis wie so oft die MySQL Test-Datenbank „sakila“:
Unser Kunde erwartete, dass der User „user1“ nun lesenden Zugriff auf sämtliche Tabellen der „sakila“-DB hatte:
Jedoch kommt es bereits bei der Anmeldung an dem Server und der Auswahl der DB „sakila" (hier über den Parameter „-Dsakila") zu einem Fehler.
Dies liegt daran, dass Rollen einem Anwender nicht per Default zugewiesen bzw. aktiviert werden. Der User muss sich in unserem Beispiel „neutral" (also ohne sich direkt mit einer Datenbank zu verbinden) einloggen, seine Rolle „aktiveren" und kann dann erst mit der gewünschten Datenbank interagieren:
Alternativ kann einem User eine Rolle aber auch per Default zugewiesen werden. Dies muss dann vom DBA (oder demjenigen, der die Rechte vergibt) übernommen werden:
Als User bekommt man wie folgt einen Überblick über die gesetzten und verfügbaren Rollen:
Fazit
Kein großes Problem. MySQL verhält sich hier ggf. etwas anders als andere Datenbanken. Rollen sind nicht zwangsläufig aktiv. Sofern der DBA keine Default-Rollen vergeben hat, müssen sie vom User aktiv „gesetzt“ werden.
Sie haben Fragen zu MySQL? Stellen Sie diese gerne direkt in den Kommentaren!
Seminarempfehlung
MYSQL ADMINISTRATION DB-MY-01
Zum Seminar