Zu Oracle

Bereich:
Versionsinfo:
PL/SQL
8.1.7, 9.2, 10.2, 11.1
Erstellung:
Letzte Überarbeitung:
02/2001 HA
05/2009 HA
 Als PDF Downloaden!

Invoker Rights

Bis zur Version 8.0.x brauchte man zum Aufruf von PL/SQL-Routinen grundsätzlich nur das EXECUTE-Recht. Wurden in der Routine Objekte ohne Schemanamen referenziert, so lagen sie im Schema des Entwicklers der Routine.

Seit Version 8.1.x hat der Entwickler mit der AUTHID-Klausel die Möglichkeit zu bestimmen, mit welchen Rechten sein Programm aufgerufen werden kann. Ohne Angabe dieser Klausel (oder mit AUTHID DEFINER) bleibt alles wie gehabt. Wird jedoch angegeben

AUTHID CURRENT_USER

, so werden bei der Ausführung die Rechte und Schemanamen des Aufrufenden verwendet.

Beispiel:

CREATE PROCEDURE dummy
  AUTHID CURRENT_USER IS
BEGIN
   UPDATE emp
      SET sal = sal * 1.1;
   DELETE FROM SCOTT.emp
    WHERE empno = 7394;
END;
/

Ruft beispielsweise User HUGO diese Prozedur auf, so braucht er neben dem EXECUTE-Recht auch das DELETE-Recht auf die Tabelle SCOTT.emp. Der UPDATE-Befehl dagegen würde eine Tabelle HUGO.emp betreffen.
Hat HUGO keine Tabelle namens emp, oder hat er keinerlei Berechtigung auf SCOTT.emp, so erhält er bei der Ausführung die Fehlermeldung:

ORA-00942: Tabelle oder View nicht vorhanden
ORA-06512: in "SCOTT.DUMMY", Zeile 4 (bzw. 6)

Kann HUGO die Tabelle SCOTT.emp sehen, aber ihm fehlt das DELETE-Recht darauf, so erhält er bei der Ausführung die Fehlermeldung:

ORA-01031: Nicht ausreichende Berechtigungen
ORA-06512: in "SCOTT.DUMMY", Zeile 6

Suche

Kontakt

Telefon:
  089 6228 6789-0

Telefon (noch gültig):
  089 679090-40

E-Mail Verteiler Monatstipps

Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.