Texte - Anleitungen - Datenbanken - Rollen aktivieren mit...
Rollen aktivieren mit Package Authentication in Oracle 7. Nov. 2003 21:10
In der Oracle Referenz werden 3 Möglichkeiten zum authorisierten Aktivieren von Rollen beschrieben. Zum einen bietet sich die passwortgeschützte Rollenaktivierung an, bei der man die Rolle durch Eingabe des richtigen Passwortes mit dem Befehl "SET ROLE rollenname IDENTIFIED BY passwort" aktiviert. Zum anderen hat man die Option, über das Betriebssystem die Berechtigung zu verifizieren. Die dritte Möglichkeit, authorisierte Packages zum Aktivieren der Rolle zu verwenden, ist allerdings etwas mangelhaft dokumentiert.

Angenommen, man hat die Rolle "Buchhalter". Und man möchte die Rolle durch eine oder mehrere Anwendungen aktivieren lassen. Dazu müssen die Anwendungen eine vordefinierte Prozedur aus einem authorisierten Package aufrufen. Die Prozedur führt nun die eigentliche Überprüfung durch, ob die benötigten, vom Programmierer definierten, Bedingungen zur Aktivierung der Rolle gegeben sind und aktiviert die Rolle bei positiver Überprüfung. Jeder, der das EXECUTE Privileg auf die Prozedur hat, kann somit die Rolle aktivieren, sofern die Bedingungen, die die Prozedur überprüft zutreffen. Man muss demnach vorsichtig bei der Vergabe des EXECUTE Privileges sein.
In unserem Beispiel können wir das Privileg dem Anwendungsprogramm geben, das einen Benutzeraccount bei der Datenbank hat, und mit der Prozedur die Rolle aktiviert. Dadurch können wir erreichen, dass nur dieses Anwendungsprogramm bestimmte Privilegen aktiviert und somit nur über dieses Programm bestimmte Aktionen durchführbar sind. Desweiteren lässt sich erzielen, dass die Prozedur über bestimmte Umgebungsvariablen beispielsweise die IP des Aufrufers überprüft und nur die Rolle aktiviert, wenn die IP die eines bestimmten PCs ist. Man kann somit nicht nur der Anwendung einzigartige sonst nicht aktivierbare Privilegien verleihen, sondern auch eine Workstation zur einzigen zugelassenen Arbeitsstation machen, die eine bestimmte Aufgabe verrichten kann.

Details:
Zunächst muss man die Anwenderrolle erstellen.
Die Syntax dafür lautet:
CREATE ROLE rollenname IDENTIFIED USING packagename

Danach (oder davor) muss man dafür sorgen, dass das Package erzeugt wird. Ausserordentlich wichtig dabei ist, dass man das Package mit Invoker-Rights (Aufruferrechten - Stichwort: AUTHID CURRENT_USER) erstellt, nicht mit Definer-Rights. Ein gültiger Package header könnte demnach wie folgt aussehen:
"CREATE OR REPLACE PACKAGE rollenAktivierung AUTHID CURRENT_USER
IS "...

Eine beliebig benannte Prozedur aus dem Package muss nun dafür sorgen, dass über den Prozeduraufruf von dbms_session.set_role eine Rolle/mehrere Rollen gesetzt werden. (Es sollte auch möglich sein, dynamisches SQL für das Setzen der Rollen zu verwenden.)
Nach dem Erstellen des Packages und dem Vergeben des EXECUTE Privileges an die Anwendung (=den Benutzer) oder eine Rolle, die die entsprechende Prozedur aus dem Package aufruft, muss man lediglich die Rollenaktivierung durch Ausführen der Prozedur testen.
Can Özdemir
eingereicht von Usher