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:


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:

-- 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:

-- 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

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


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

-- 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:

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:

-- 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

Im nächsten Schritt kann das Thema durch praktische Übungen mit Rollen, Rechteentzug und Fehleranalyse vertieft werden.

Vorheriges ThemaDDL & Data Dictionary Ende der ReiheKein weiteres Thema