Rechteverwaltung
Mit Hilfe der Data Control Language (DCL) ist es möglich, die Sicherheit und den Zugriff auf die Datenbank zu steuern. Durch die Verwaltung von Benutzern und Rollen sowie die Gewährung von Privilegien kann feingranular unterschieden werden, wer welche Aktionen in der Datenbank ausführen darf.
Folgende SQL-Befehle sind Bestandteil der DCL:
- CREATE USER: Anlegen eines Benutzers
- ALTER USER: Ändern des Passworts
- DROP USER: Löschen eines Benutzers
- CREATE ROLE: Erzeugen einer Rolle
- DROP ROLE: Löschen einer Rolle
- GRANT: Gewährt Rollen, Systemprivilegien oder Objektprivilegien
- REVOKE: Entzieht Systemprivilegien, Objektprivilegien oder Rollen
- ALTER SCHEMA: Ändert den Besitzer eines Schemas (und damit aller darin enthaltenen Schemaobjekte)
User
Für jeden Benutzer, der sich mit der Datenbank verbinden will, muss von einem Administrator ein USER-Account angelegt worden sein (mit dem SQL-Befehl CREATE USER). Hierbei erhält der Benutzer ein Passwort, das er jederzeit ändern kann, und mit dem er sich gegenüber der Datenbank authentifiziert.
Damit ein Benutzer auch Aktionen in der Datenbank ausführen darf, benötigt er entsprechende Privilegien. Diese werden ihm von einem Administrator oder anderen Benutzern gewährt bzw. entzogen. Zum Beispiel muss ein Benutzer das Systemprivileg CREATE SESSION besitzen, um sich mit der Datenbank verbinden zu können. Will man einen Nutzer temporär deaktivieren, so entzieht man ihm dieses Systemprivileg.
Benutzernamen, Rollen und Passwörter sind case-insensitiv!
Um Queries auszuführen muss der Nutzer eine Reihe weiterer Privilegien besitzen:
-
- CREATE USER mike IDENTIFIED BY secret;
- GRANT CREATE SESSION TO mike;
- GRANT SELECT ON s1.tab1 TO mike;
Rollen
Rollen dienen der Gruppierung von Benutzern und können die Rechteverwaltung erheblich vereinfachen. Sie werden mit dem Befehl CREATE ROLE erzeugt. Einem Benutzer kann eine oder mehrere Rollen durch den SQL-Befehl GRANT zugewiesen werden. Dadurch erhält der Benutzer die Rechte der entsprechenden Rollen. Anstatt vielen "ähnlichen" Benutzern die gleichen Privilegien vergeben zu müssen, kann man einfach eine Rolle erzeugen und ihr die entsprechenden Privilegien gewähren. Durch die Zuweisung von Rollen zu Rollen ist sogar ein hierarchischer Aufbau von Privilegien möglich.
Es gibt einige vorangelegte Benutzer bzw. Rollen, die mit EXASolution ausgeliefert werden und mit Hilfe derer eine Rechteverwaltung erst ermöglicht wird.
- Benutzer SYS
Systembenutzer, der alle Rechte innehat und nicht gelöscht werden kann. - Rolle DBA
Die Rolle DBA besitzt alle existierenden Systemprivilegien mit der ADMIN-Option. Diese Rolle kann nicht gelöscht werden. - Rolle PUBLIC
Auch diese Rolle kann nicht gelöscht werden. Sie ist automatisch jedem Benutzer zugewiesen, kann aber über REVOKE auch entzogen werden.
-
- CREATE ROLE reader;
- GRANT SELECT ON s2.tab1 TO reader;
- GRANT SELECT ON s2.tab2 TO reader;
- GRANT reader TO mike;
Rollen können nicht deaktiviert werden (wie z.B. bei Oracle). Soll die Zuweisung zu einer Rolle wieder rückgängig gemacht werden, so kann man mit dem SQL-Befehl REVOKE die Rolle wieder entziehen.
Nachträgliche Änderungen (GRANT/REVOKE) an der Rolle wirken sich auch auf die Benutzer aus, die diese Rolle inne haben
Privilegien
Privilegien steuern den Zugriff auf die Datenbank. Es gibt keine ‚negativen Rechte’, die explizit bestimmte Aktionen untersagen. Mit den SQL-Befehlen GRANT und REVOKE werden Privilegien gewährt bzw. entzogen. Es wird zwischen zwei verschiedenen Privilegien-Arten unterschieden:
Systemprivilegien steuern generelle Rechte wie z.B. "Schema anlegen", "Benutzer anlegen", "auf beliebige Tabellen zugreifen" oder "die Datenbank herunterfahren".
Objektprivilegien erlauben den Zugriff auf einzelne Schemaobjekte (z.B. "SELECT-Zugriff auf die Tabelle t im Schema s"). Als Schemaobjekte werden Tabellen, Views, Funktionen und Prozeduren bezeichnet. Dabei ist zu beachten, dass jedes Schema und alle darin enthaltenen Schemaobjekte genau einem Benutzer oder einer Rolle gehören. Dieser Benutzer bzw. alle Inhaber dieser Rolle haben stets das Recht, diese Objekte zu löschen und anderen Nutzern darauf Zugriff zu erteilen.
Zugriffskontrolle bei SQL-Befehlen
Bei jedem SQL-Statement wird vor dessen Ausführung überprüft, ob der aktuelle Benutzer über die entsprechenden Rechte verfügt und, falls dies nicht der Fall ist, eine Fehlermeldung ausgegeben.
Zugriffsrechte auf einzelne Spalten einer Tabelle oder View werden nicht unterstützt. Soll nur ein Ausschnitt einer Tabelle für bestimmte Benutzer/Rollen sichtbar sein, so kann dies mit Hilfe von Views geschehen, die diesen Teil selektieren. Anstatt Zugriff auf die eigentliche Tabelle zu gewähren, wird dies nur für die erzeugte View erlaubt. Dadurch kann ein Zugriffsschutz für einzelne Spalten und/oder Zeilen realisiert werden.
Metainformationen zur Rechteverwaltung
Der Zustand der Rechteverwaltung in der Datenbank lässt sich über eine Vielzahl von Systemtabellen abfragen. In ihnen stehen Informationen über die existierenden Benutzer und Rollen sowie deren Rechte. Zudem kann ein Benutzer ermitteln, welche Rollen er einnimmt, auf welche Schemaobjekte er Zugriff hat, welche Privilegien er anderen gewährt hat und welche er selbst besitzt.

- System- und Objektprivilegien können einzelnen Usern zugewiesen werden.
- Zusammenfassung von System- und Objektprivilegien zu Rollen.
- Zuweisen der Rolle zu einem oder mehreren Benutzern.
- Zuweisen von Rollen zu anderen Rollen erzeugt eine Hierarchie innerhalb der Rollen.
Benutzer, Rollen sowie Privilegien sind genauso transaktionsbasiert wie die Schemaobjekte der Datenbank. Das bedeutet, dass Änderungen erst dann sichtbar werden, wenn die Transaktion durch ein COMMIT abgeschlossen wird. Weil bei allen SQL-Befehlen lesend auf den eigenen Benutzer zugegriffen wird, um dessen Privilegien abzufragen, sollten DCL-Befehle (Data Control Language) möglichst immer mit eingeschaltetem AUTOCOMMIT durchgeführt werden. Ansonsten steigt die Gefahr von Konflikten zwischen Transaktionen.















