Array ( [0] => facebook [1] => twitter [2] => google_plus )

Berechtigungskonzept (für MySQL)

Posted on:8. Februar 2015

Author:Markus Köhler

Category:IT

Share: / /

Ein Berechtigungskonzept zu erstellen, und es dann auch erfolgreich umzusetzen, kann von verschiedenen Entwicklern ganz unterschiedlich verstanden werden. Aber im Prinzip geht es immer nur darum, den Zugriff des  einzelnen Benutzers auf Daten oder Datenbanken so weit zu beschränken, dass er keinen Unfug treiben kann und nur Zugriff auf die für ihn freigegebenen Inhalte hat. Diesen Zugriff kann man dann noch nach Lese- und Schreib- oder Vollzugriff unterteilen. Das erfordert natürlich einige Datenbankrollen und eine verlässliche Zuordnung von Endbenutzer zu Datenbankrolle. Dieses Konzept muss auf unterschiedlichen Plattformen verschieden umgesetzt werden, als Beispiel wollen wir hier einmal Microsoft SQL im Vergleich zu MySQL betrachten.

Schematische Darstellung des Workflows

Schematische Darstellung des Workflows

Hier sehen wir die schematische Darstellung des Ziels, das wir verfolgen. Benutzer A soll unter keinen Umständen in die Datenbank schreiben können dürfen, Benutzer B hat Lese- und Schreibzugriff, also ist quasi ein Administrator, und Benutzer C hat hingegen nur schreibenden Zugriff auf die Datenbank. Wie kann man nun die Datenbankrollen am effizientesten auf die Nutzer aufteilen? Selbst Wikipedia sagt, dass rein Benutzer-bezogene Konzepte zur Unübersichtlichkeit neigen. Also wollen wir erreichen, dass wir die Berechtigung per Rolle oder Benutzergruppe zuweisen können. In Microsoft SQL ist das kein Problem, wenn wir uns dem Active Directory und der Windows-Authentifizierung bedienen:

 

Schematische Darstellung des Workflows für MS SQL

Schematische Darstellung des Workflows für MS SQL

Das ist eine sehr vereinfachte Darstellung, da wir auf Seiten des Datenbankservers die AD-Gruppen auch noch den Datenbankrollen zuordnen müssen. Aber es ist klar ersichtlich, dass wir mit doppelt so vielen Benutzern wie in der ersten Abbildung keinen nennenswerten Mehraufwand in der Rechtezuordnung haben. So lässt sich sehr rudimentär ein Berechtigungskonzept für Anwendungen mit Verbindung zu einem Microsoft SQL Server realisieren. Bei MySQL haben wir es da schwerer:

Ashampoo_Snap_2015.02.08_10h39m37s_003_

Schematische Darstellung des Workflows für MySQL

Dieses Thema wird bisher im Web nur dünn diskutiert, wie es scheint, da wohl alle größeren Projekte ohne große Kommunikation nach außen ihr eigenes Rechtekonzept umsetzen, was der User dann schlucken muss, und Amateurentwickler haben dieses Problem der Rechteverwaltung offenbar meist nicht. Darum möchte ich hier mein eigenes Konzept vorstellen. Ich würde die einzelnen Benutzer der Anwendung programmatisch, also bspw. im PHP-Code, nicht in der Datenbank, ihren Rechten zuordnen. Denn das Problem, wenn wir die Rechte per Datenbank-Tabellen setzen, ist dass wir dann noch einen zusätzlichen Datenbank-User für die Rechte-Abfrage bräuchten, der also nur Leserechte und nur auf die Rechte-Tabelle hat. Damit wäre unser Konzept nicht mehr konsistent. Viel besser finde ich den Ansatz, die Rechte bspw. in einer JSON-Datei im Web-Verzeichnis abzulegen, welche dann über das Frontend verändert werden kann. Wenn wir diesen Ansatz verfolgen, könnten wir im einfachsten Fall zu folgendem PHP-Code kommen:

PHP-Code für Rechteverwaltung

PHP-Code für Rechteverwaltung

Die Ausgabe im JSON-Format wäre dann die folgende:

{„mkoehler“:2,“mmuster“:0,“lmueller“:0,“fwalter“:1}

In Verbindung mit dem ersten Array in unserem PHP-Code, wo wir den numerischen Rechten zusätzlich Namen gegeben haben, kann man nun einfach prüfen, welche Rechte ein Nutzer hat. Dementsprechend kann man dem Nutzer seine Datenbank-Verbindung zuweisen, mit der er also nur Lesen, nur Schreiben oder beides kann, es wäre natürlich auch denkbar, den Zugriff nur auf bestimmte Datenbanken zu gewähren.

Fazit

Wir haben gesehen, dass ein Berechtigungskonzept gerade für ein kommerzielles Umfeld und größere Projekte unabdingbar ist. In Microsoft SQL scheint das Berechtigungskonzept zunächst einfacher umzusetzen, allerdings auch nur, wenn ein Active Directory zur Verfügung steht. Sonst müsste man auch, wie am MySQL-Beispiel demonstriert, eine programmatische Rechteverwaltung dem Datenbankzugriff zugrunde legen. Die gezeigten Beispiele können und sollen natürlich beliebig erweitert werden, um noch feiner granulare Rechte vergeben zu können.

GD Star Rating
loading...

Kommentar verfassen

%d Bloggern gefällt das: