Inhaltsverzeichnis
- Überblick DCL
- GRANT - Objektprivilegien vergeben
- REVOKE - Rechte entziehen
- Systemprivilegien
- Rollen in Oracle
- WITH GRANT OPTION und WITH ADMIN OPTION
- Typische Berechtigungsszenarien
- Data Dictionary für Rechte und Rollen
- Sicherheitsrichtlinien und Best Practices
- Fehlerbilder und Troubleshooting
- Praxisbeispiel Klassenprojekt
- Zusammenfassung und Ausblick
DCL - Data Control Language: Rechte und Rollen in Oracle
Fach: Informationstechnologie - Datenbanksysteme
Schulstufe: 11. Schulstufe - HTL Informatik
Voraussetzungen: SQL Einführung, DQL, DML, DDL, SCOTT-Schema
Autor: HTL Pinkafeld - IF/IT
1. Überblick DCL
1.1 Was ist DCL?
DCL (Data Control Language) regelt in SQL, wer welche Aktionen auf Datenbankobjekten ausführen darf.
DCL-Anweisungen:
|- GRANT -> Rechte vergeben
|- REVOKE -> Rechte entziehen
\- Rollen nutzen, um Rechte zu bündeln
1.2 DCL im Vergleich zu DDL und DML
| Bereich | Zweck | Beispiele |
|---|---|---|
| DDL | Struktur definieren | CREATE TABLE, ALTER TABLE |
| DML | Daten bearbeiten | INSERT, UPDATE, DELETE |
| DCL | Zugriffe steuern | GRANT, REVOKE |
Wichtig: DCL ist ein zentraler Baustein für Datenbanksicherheit, Datenschutz und Nachvollziehbarkeit.
1.3 Prinzip der minimalen Rechte
Benutzer sollen nur jene Rechte bekommen, die sie für ihre Aufgaben wirklich brauchen:
- Lesen statt Vollzugriff, wenn Schreiben nicht nötig ist
- Rollen statt Einzelrechte pro Benutzer
- Zeitnahe Entfernung nicht mehr benötigter Rechte
2. GRANT - Objektprivilegien vergeben
2.1 Grundsyntax
GRANT privileg [, privileg ...]
ON objektname
TO benutzer_oder_rolle;
2.2 Wichtige Objektprivilegien
| Privileg | Bedeutung |
|---|---|
| SELECT | Daten lesen |
| INSERT | Neue Zeilen einfügen |
| UPDATE | Vorhandene Zeilen ändern |
| DELETE | Zeilen löschen |
| REFERENCES | Fremdschlüssel auf Tabelle setzen |
| EXECUTE | Prozedur/Funktion ausführen |
2.3 Beispiele
-- Leserecht auf Tabelle EMP an Benutzer SCHUELER1
GRANT SELECT
ON EMP
TO SCHUELER1;
-- Mehrere Rechte gleichzeitig
GRANT SELECT, INSERT, UPDATE
ON PROJEKT
TO TEAM_A;
-- Ausführungsrecht auf eine Funktion
GRANT EXECUTE
ON BERECHNE_NOTE
TO LEHRER_ROLLE;
2.4 Objektprivilegien im SCOTT-Schema
Im Unterricht wird oft mit dem Benutzer SCOTT gearbeitet. Die Tabellen EMP, DEPT, BONUS und SALGRADE gehören in diesem Fall SCOTT.
Das ist für GRANT/REVOKE wichtig:
- Nur der Eigentümer (oder ein DBA) kann Objektprivilegien auf das Objekt vergeben.
- Außerhalb des eigenen Schemas sollte das Objekt qualifiziert werden (Schema.Objekt).
-- Aus Sicht von SCOTT: Leserecht auf EMP an APP_USER
GRANT SELECT
ON SCOTT.EMP
TO APP_USER;
-- APP_USER darf auch auf DEPT lesen
GRANT SELECT
ON SCOTT.DEPT
TO APP_USER;
2.5 Feingranulare Objektprivilegien (Spaltenebene)
Bei UPDATE kann in Oracle auf bestimmte Spalten eingeschränkt werden. So kann ein Benutzer z. B. Gehalt pflegen, aber nicht Name oder Abteilung ändern.
-- APP_USER darf nur SAL und COMM in SCOTT.EMP ändern
GRANT UPDATE (SAL, COMM)
ON SCOTT.EMP
TO APP_USER;
-- Optional zusätzlich Leserecht
GRANT SELECT
ON SCOTT.EMP
TO APP_USER;
Praxisnutzen: Minimalprinzip auch innerhalb einer Tabelle umsetzen.
2.6 Typisches SCOTT-Szenario (Lehrbetrieb)
Ausgangslage:
- SCOTT ist Eigentümer der Stammtabellen.
- REPORT_USER soll nur lesen.
- HR_USER soll in EMP teilweise pflegen.
-- 1) Reiner Lesebenutzer
GRANT SELECT ON SCOTT.EMP TO REPORT_USER;
GRANT SELECT ON SCOTT.DEPT TO REPORT_USER;
GRANT SELECT ON SCOTT.SALGRADE TO REPORT_USER;
-- 2) Pflegebenutzer mit eingeschränkten Rechten
GRANT SELECT ON SCOTT.EMP TO HR_USER;
GRANT UPDATE (SAL, COMM) ON SCOTT.EMP TO HR_USER;
Kontrolle über Data Dictionary (als SCOTT oder DBA):
-- Welche Objektprivilegien wurden auf SCOTT-Objekte vergeben?
SELECT GRANTEE, OWNER, TABLE_NAME, PRIVILEGE, GRANTABLE
FROM ALL_TAB_PRIVS
WHERE OWNER = 'SCOTT'
ORDER BY TABLE_NAME, GRANTEE, PRIVILEGE;
3. REVOKE - Rechte entziehen
3.1 Grundsyntax
REVOKE privileg [, privileg ...]
ON objektname
FROM benutzer_oder_rolle;
3.2 Beispiele
-- Schreibrechte entfernen
REVOKE INSERT, UPDATE
ON PROJEKT
FROM TEAM_A;
-- Leserecht entziehen
REVOKE SELECT
ON EMP
FROM SCHUELER1;
3.3 Beachte Abhängigkeiten
Beim Entzug von Rechten kann es Folgewirkungen geben, wenn Rechte weitergegeben wurden oder Objekte voneinander abhängen.
4. Systemprivilegien
Systemprivilegien erlauben allgemeine Aktionen in einem Schema oder in der Datenbank.
4.1 Typische Systemprivilegien
| Privileg | Bedeutung |
|---|---|
| CREATE SESSION | Anmeldung an der Datenbank |
| CREATE TABLE | Tabellen erstellen |
| CREATE VIEW | Views erstellen |
| CREATE SEQUENCE | Sequences erstellen |
| CREATE PROCEDURE | Prozeduren/Funktionen erstellen |
4.2 Beispiele
-- Benutzer darf sich anmelden
GRANT CREATE SESSION TO SCHUELER1;
-- Benutzer darf Tabellen und Views im eigenen Schema anlegen
GRANT CREATE TABLE, CREATE VIEW
TO SCHUELER1;
Hinweis: Systemprivilegien sind mächtiger als Objektprivilegien und sollten restriktiv vergeben werden.
5. Rollen in Oracle
5.1 Warum Rollen?
Rollen fassen Rechte zusammen und vereinfachen die Verwaltung.
-- Rolle erstellen
CREATE ROLE LESE_ROLLE;
-- Rechte an Rolle vergeben
GRANT SELECT
ON EMP
TO LESE_ROLLE;
-- Rolle an Benutzer vergeben
GRANT LESE_ROLLE
TO SCHUELER1;
5.2 Vorteile
- Weniger Verwaltungsaufwand
- Einheitliche Rechte für Gruppen
- Schnellere Anpassungen bei Rollenwechsel
5.3 Rollen wieder entziehen
REVOKE LESE_ROLLE
FROM SCHUELER1;
6. WITH GRANT OPTION und WITH ADMIN OPTION
6.1 WITH GRANT OPTION (Objektprivilegien)
GRANT SELECT
ON EMP
TO SCHUELER1
WITH GRANT OPTION;
Damit darf SCHUELER1 das erhaltene Objektrecht an andere Benutzer weitergeben.
6.2 WITH ADMIN OPTION (Systemprivilegien und Rollen)
GRANT CREATE TABLE
TO SCHUELER1
WITH ADMIN OPTION;
GRANT LESE_ROLLE
TO SCHUELER1
WITH ADMIN OPTION;
Damit darf SCHUELER1 das Privileg oder die Rolle an andere vergeben oder wieder entziehen.
Sicherheitsaspekt: Diese Optionen nur gezielt vergeben, da sich Rechte sonst unkontrolliert verbreiten können.
7. Typische Berechtigungsszenarien
7.1 Lesender Zugriff für Reporting
GRANT SELECT
ON KUNDEN
TO REPORTING_ROLLE;
7.2 Schreibzugriff für Applikation
GRANT SELECT, INSERT, UPDATE
ON BESTELLUNG
TO APP_ROLLE;
7.3 Trennung von Entwickler- und Laufzeitrechten
- Entwickler erhalten zusätzliche CREATE-Rechte im Testsystem
- Produktiv-Benutzer erhalten nur nötige Laufzeitrechte
- DDL-Rechte in Produktion nur für Administratoren
8. Data Dictionary für Rechte und Rollen
Wichtige Views zur Kontrolle von Berechtigungen:
| View | Inhalt |
|---|---|
| USER_TAB_PRIVS | Objektrechte des aktuellen Benutzers |
| USER_SYS_PRIVS | Systemrechte des aktuellen Benutzers |
| USER_ROLE_PRIVS | Rollen des aktuellen Benutzers |
| ALL_TAB_PRIVS | Objektrechte auf erreichbare Objekte |
| DBA_ROLE_PRIVS | Rollen aller Benutzer (DBA) |
8.1 Beispielabfragen
-- Welche Rollen hat der aktuelle Benutzer?
SELECT *
FROM USER_ROLE_PRIVS;
-- Welche Systemprivilegien hat der aktuelle Benutzer?
SELECT *
FROM USER_SYS_PRIVS;
-- Welche Objektprivilegien gibt es auf eigene Tabellen?
SELECT *
FROM USER_TAB_PRIVS;
9. Sicherheitsrichtlinien und Best Practices
- Rechtevergabe über Rollen statt direkt an Einzelbenutzer
- Keine pauschalen ALL PRIVILEGES Vergaben
- Regelmäßige Berechtigungs-Reviews
- Trennung von Entwicklungs-, Test- und Produktivsystem
- Kritische Aktionen protokollieren (Auditing)
-- Beispiel: Nur nötige Rechte für eine Reporting-Rolle
GRANT CREATE SESSION TO REPORTING_ROLLE;
GRANT SELECT ON KUNDEN TO REPORTING_ROLLE;
GRANT SELECT ON BESTELLUNG TO REPORTING_ROLLE;
10. Fehlerbilder und Troubleshooting
10.1 ORA-01045: user lacks CREATE SESSION privilege
Der Benutzer kann sich nicht anmelden, weil das Recht fehlt:
GRANT CREATE SESSION TO SCHUELER1;
10.2 ORA-00942: table or view does not exist
Häufige Ursachen:
- Objektname falsch oder anderes Schema
- Kein SELECT-Recht auf das Objekt
GRANT SELECT ON LEHRER.EMP TO SCHUELER1;
10.3 ORA-01031: insufficient privileges
Die Aktion ist grundsätzlich bekannt, aber der Benutzer hat nicht genug Rechte.
11. Praxisbeispiel Klassenprojekt
Ausgangslage:
- Benutzer TEAM_READ soll nur lesen
- Benutzer TEAM_EDIT soll lesen und schreiben
- Rolle KURS_ADMIN soll zusätzlich Strukturen anlegen dürfen
-- Rollen anlegen
CREATE ROLE TEAM_READ;
CREATE ROLE TEAM_EDIT;
CREATE ROLE KURS_ADMIN;
-- Objektrechte vergeben
GRANT SELECT ON PROJEKT TO TEAM_READ;
GRANT SELECT, INSERT, UPDATE ON PROJEKT TO TEAM_EDIT;
-- Systemrechte fuer Admin-Rolle
GRANT CREATE TABLE, CREATE VIEW TO KURS_ADMIN;
-- Rollen an Benutzer vergeben
GRANT TEAM_READ TO USER_A;
GRANT TEAM_EDIT TO USER_B;
GRANT KURS_ADMIN TO USER_C;
Vorteil: Rollen können bei Bedarf angepasst werden, ohne jede einzelne Benutzerberechtigung manuell ändern zu müssen.
12. Zusammenfassung und Ausblick
- DCL steuert den Zugriff auf Datenbankobjekte und Systemfunktionen.
- Mit GRANT werden Rechte vergeben, mit REVOKE wieder entzogen.
- Rollen machen Berechtigungen übersichtlich und wartbar.
- Das Data Dictionary hilft bei Kontrolle und Analyse der Sicherheit.
Im nächsten Schritt kann das Thema durch praktische Übungen mit Rollen, Rechteentzug und Fehleranalyse vertieft werden.