Ich habe letztens auf einer Oracle 10.2.0.5 Datenbank mit Prozeduren rumgespielt. Konkret habe ich eine gebraucht, die mir den Audit-Trail der durch den Parameter audit_trail=db,extended
entstanden ist, mal wieder aus der Datenbank löscht. Diese Prozedur sollte mit SYSTEM ausgeführt werden.
Mein erster Versuch der Prozedur sah wie folgt aus:
|
|
Bei der Ausführung durch SYS war alles in Ordnung (egal, ob die Prozedur unter SYS oder SYSTEM eingebaut wurde), bei Ausführung unter SYSTEM konnte AUD$ nicht gefunden werden. Dubioserweise konnte aber per SELECT in der gleichen Prozedur drauf zugegriffen werden.
Hintergrund des ganzen Mist ist, dass Oracle ein bisschen seltsames Sicherheitsmodell hat und man einer Prozedur mittels AUTHID mitgeben sollte, mit welchen Privilegien man diese ausführen kann. Will man die gleichen Privilegien als der Ersteller mitgeben, so muss man die Prozedur wie folgt definieren:
|
|
Will man die des ausführenden Nutzers verwenden, so muss man AUTHID CURRENT_USER statt AUTHID DEFINER verwenden. Das Ergebnis sieht daher wie folgt aus:
|
|