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
Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.