Relationale Datenbanken

Informatik Johann Penon

Zugriffsrechte SQL

Vorbemerkungen

Alle im weiteren erwähnten Zugriffsrechte beziehen sich auf den SQL1-Standard. Die Beispiele gelten für MySQL und entsprechen teilweise nicht diesem Standard.

Zugriffsebenen

Zugriffsrechte für Datenbanken können auf vier Ebenen vergeben werden:
Globale Ebene
Die Ebene des Datenbank Management Systems (DBMS). Die hier vergebenen Rechte gelten für alle Datenbanken auf dem Server.
Datenbank-Ebene
Der Zugang zu einzelnen Datenbanken, d.h. wer eine Datenbank benutzen darf
Tabellen-Ebene
Der differenzierte Zugriff auf einzelne Tabellen, d.h. welche Operationen auf einer Tabelle (Relation) ausgeführt werden dürfen
Spalten-Ebene
Der differenzierte Zugriff auf einzelne Spalten, d.h. welche Operationen auf einer Spalter (Attribut) ausgeführt werden dürfen.

Die dargestellten Rechte werden in der angegebenen Reihenfolge ausgewertet. Das bedeutet: Rechte die auf der globalen Ebene vergeben werden, können auf unteren Ebene nicht wieder eingeschränkt werden. Auf der globalen Ebene sollte deshalb nur die Administration des DBMS über alle Rechte verfügen und allen anderen Benutzerinnen und Benutzer sollten nur das Zugangsrecht zum DBMS haben. Alle weiteren Rechte sollten nur jeweils für Datenbanken, Tabellen und Spalten vergeben werden.

Zugang zum Datenbank Management System (Globale Ebene)

Globale Berechtigungen betreffen alle Datenbanken auf einem gegebenen Server.  Diese Rechte sollten sehr sparsam oder gar nicht vergeben werden.

Der Befehl bei MySQL dafür lautet für die Einrichtung des Benutzerkontos ausleihe mit dem Passwort auff: GRANT USAGE on *.* to ausleihe@localhost IDENTIFIED BY 'auff'; Die USAGE-Berechtigung erlaubt bei MySQL, einen Benutzer ohne Berechtigungen anzulegen.

Für das gesamte Datenbank Management System werden Administratorenrechte vergeben. Diese Rechte sind nicht eingeschränkt und erlauben es alle Datenbanken und Rechte zu verändern und zu löschen. Wichtigste Aufgabe der globalen Datenbankadministration ist es leere Datenbank zu erzeugen und dafür die Rechte der Datenbankadministration zu vergeben.

Zugang zur Datenbank

Dieses Zugriffsrecht legt fest, wer die Datenbank aufrufen und damit nutzen darf. Entweder kann dieses Recht allen Benutzerinnen und Benutzern oder einzelnen Personen zugeteilt werden. Greift jemand unberechtigterweise auf die Datenbank zu, so wird er mit einer entsprechenden Fehlermeldung abgewiesen.

Um allen Benutzerinnen und Benutzern bei MySQL einen Zugriff auf die Datenbank "FF" zu gewähren lautet der Befehl: GRANT USAGE on FF.* to ''@localhost;

Für jede Datenbank werden besondere Rechte für die Administration vergeben. Das Recht der Datenbankadministration umfasst alle Zugriffe auf die Datenbank. Insbesondere können mit diesem Recht:
 
  • alle Zugriffsrechte vergeben und entzogen
  • Tabellen, Views und Indices erzeugt, verändert und gelöscht
  • die Datenbank gelöscht

werden. Wer die Datenbank erzeugt, wird automatisch Datenbankadministrator dieser Datenbank, d.h. er besitzt DBA-Rechte. Dieses Recht kann vom Administrator weiteren Personen zuerkennen.

DBA-Rechte sollten auf wenige Personen beschränkt bleiben.

Zugriff auf Tabellen

Für jede Tabelle wird entschieden, wer auf diese Tabelle mit welchen Rechten zugreifen darf. Folgende Zugriffsrechte können vergeben werden:
  • Ansehen (SELECT)
  • Hinzufügen (INSERT)
  • Ändern (UPDATE)
  • Löschen (DELETE)
  • alle obigen Zugriffsrechte (ALL PRIVILEGES)

Weiter können differenziert Rechte zur Tabellenveränderung erteilt werden. Dies ist in den entsprechenden Handbüchern nachzulesen, und wird hier nicht näher erläutert.

Standardmäßig werden zunächst alle Tabellenrechte für die Allgemeinheit freigegeben. Die Einschränkung auf bestimmte Personen ist gesondert zu programmieren. Die allgemeinen Rechte sind dabei ausdrücklich rückgängig zu machen.

Folgende Tabelle kann als Musterdokumentation für die Festlegung von Tabellenrechten dienen:

Tabellenname

Benutzernamen
SELECT
INSERT
UPDATE
DELETE
Name
ja/nein
ja/nein
ja/nein
ja/nein
Name
ja/nein
ja/nein
ja/nein
ja/nein
Name
ja/nein
ja/nein
ja/nein
ja/nein
Name
ja/nein
ja/nein
ja/nein
ja/nein
Name
ja/nein
ja/nein
ja/nein
ja/nein

Soll ein Zugriff auf bestimmte Tabellen auch für unangemeldete Benutzer möglich sein, so ist es ratsam dafür einen besonderen Benutzer (z.B. Dummy) mit entsprechenden Rechten einzurichten.

Beispiel für die Regelung der Zugriffe auf die Tabelle Werkstatt in MySql:

GRANT SELECT ON FF.werkstatt TO fuhrpark@localhost, wartung@localhost;
GRANT INSERT ON FF.werkstatt TO wartung@localhost;
GRANT UPDATE ON FF.werkstatt TO wartung@localhost;
GRANT DELETE ON FF.werkstatt TO wartung@localhost;

Der Benutzer "wartung" darf die Tabelle ansehen und kann Werte einfügen, ändern und löschen. Der Benutzer "fuhrpark" hat nur Leserechte.


Zugriff auf Spalten

Für jede Spalte wird entschieden, wer auf diese Tabelle mit welchen Rechten zugreifen darf. Folgende Zugriffsrechte können vergeben werden:
  • Ansehen (SELECT)
  • Hinzufügen (INSERT)
  • Ändern (UPDATE)
  • Löschen (DELETE)
  • alle obigen Zugriffsrechte (ALL PRIVILEGES

Views

Durch geeignet definierte Views wird erreicht, dass je nach Bedarf ein bestimmter Ausschnitt der Datenbank zur Verfügung gestellt wird. Dieser Ausschnitt kann aus einer Kombination von Feldern aus verschiedenen Tabellen bestehen. So können zum Beispiel aus Sicherheitsgründen kritische Daten (wie Kontostand) vor nicht-privilegierten Benutzern verborgen werden, während privilegierte Benutzer auf alle Daten zugreifen dürfen. Views werden wie Tabellen behandelt, d.h. es können alle Tabellenrechte vergeben werden.

Bei der Kombination von Feldern verschiedener Tabellen müssen die Zugriffsrechte aller beteiligten Tabellen für den jeweiligen Benutzer der Views definiert werden.

Beispiel für Zugriffsrechte

zum Seitenanfang springen

zum Seitenanfang springen