Von Matthias Jung auf Dienstag, 14. Juni 2022
Kategorie: MySQL (PDO)

Darf es ein bisschen weniger sein? - MySQL „partial revokes“

Berechtigungen auf Datenbanken zu vergeben kann ein mühsamer Job sein. Gerade das Vergeben von restriktiven Rechten à la „Du darfst alle Tabellen lesen, bis auf die Informationen in der Datenbank XYZ" war ein aufwändiges Unterfangen. Für eine solche Aufgabe mussten die SELECT-Rechte für alle Datenbanken definiert werden, die der User lesen können sollte. Die unerwünschte Datenbank wurde einfach mit keinen Rechten bedacht. Natürlich kann man sich solche GRANT-Anweisungen mit SQL dynamisch erstellen, um den Aufwand in Grenzen zu halten. Mit der Version 8.0.16 gibt es hier eine kleine Erleichterung.

Rückrufaktion 

Ab sofort können Berechtigungen auf Schema-Ebene partiell „zurückgerufen" (revoked) werden. Dazu muss der entsprechende Parameter „partial_revokes" aktiviert werden. 

Auf unserem Test-Datenbanksystem sind mehrere Schemata (Datenbanken) vorhanden. Unter anderem die bekannte Demo-Datenbank „sakila". 

Wir legen uns nun einen Account (User 'app_ro') an, der auf allen Datenbanken (auch auf zukünftigen) Leseberechtigungen haben soll. 

Damit hat dieser Nutzer nun lesenden Zugriff auf alle (auch zukünftigen) Datenbanken: 

Nun entziehen wir diesem User jedoch den Zugang zu der Datenbank „sakila". 

Die Datenbank verschwindet aus dem „Blickfeld" dieses Datenbankusers ‚app_ro'. 

Alles unter Kontrolle? 

Wie werden diese Berechtigungsstrukturen verwaltet? Allgemein bekannt dürfte sein, dass die Rechte in mehreren Systemtabellen, innerhalb der MySql-Datenbank gespeichert werden. Dort befinden sich bislang nur die vergebenen „GRANTs", also die positiv formulierten Privilegien.

Mit der Version 8.0.16 werden nun in der „user"-Tabelle, innerhalb der MySql-Datenbank, auch Restriktionen verwaltet. Dazu wird die Spalte „user_attributes" (Datentype JSON) verwendet.

Natürlich kann man beim SELECT die Ausgabe von JSON-Daten auch etwas lesbarer formatieren.

Fazit: Brauchen wir mehr Restriktionen? 

Die klare Antwort lautet „Ja!". Die neue Funktionalität ist auf jeden Fall hilfreich. Leider können Restriktionen aktuell nur auf Schema-Ebene gesetzt werden. Interessanter für den Entwickler und / oder den DBA wären Einschränkungen auf Objekt-Ebene (z.B. Tabellen). Aber was nicht ist, kann ja noch werden.

Seminarempfehlung

Kommentare hinterlassen