Proxy User: Anwendungsbenutzer eindeutig identifizieren (2)
von Heinz-Wilhelm Fabry, ORACLE Deutschland B.V. & Co. KG
Nachvollziehbarkeit ist eines der Hauptthemen im Bereich der Datenbanksicherheit. Deshalb steht
der DBA bei Anwendungen, die über einen Application Server auf die Datenbank zugreifen, immer
wieder vor der Herausforderung, wie man die Benutzer der zugehörigen Anwendung eindeutig
identifiziert. Diese Herausforderung wird durch die Verwendung des Connection Pooling noch
größer. Der Community Beitrag
Anwendungsbenutzer eindeutig identifizieren hat sich bereits einmal mit dem Thema
beschäftigt und sich dabei auf das Arbeiten mit dem CLIENT_IDENTIFIER konzentriert: Mit dem
CLIENT_IDENTIFIER kann der Fall abgedeckt werden, dass eine Anwendung als alleiniger Benutzer
auf der Datenbank arbeitet. Alle Rechte und die gesamte Rechteverwaltung liegen bei der
Anwendung, aber die einzelnen Aktionen der Anwendung können über den Identifier jeweils
einem konkreten Benutzer eindeutig zugeordnet werden.
Dieses Verfahren birgt allerdings die Gefahr, dass durch Umgehen der Anwendung
die darin implementierten Berechtigungskonzepte unterlaufen werden. Das läßt sich nur
verhindern, wenn die Rechte der Anwendungsbenutzer durch die Datenbank selbst verwaltet
werden. Damit stellt sich selbstverständlich die umgekehrte Frage, wie unterschiedliche
Berechtigungen der Endbenutzer wirksam umgesetzt werden können, wenn alle mit der gleichen
Anwendung arbeiten. Der aktuelle Beitrag zeigt, wie man diese Frage durch die Verwendung
sogenannter Proxy Benutzer recht einfach beantworten kann.
Die Datenbank bietet schon lange bei Zugriffen über JDBC und OCI die Möglichkeit, Proxy Benutzer
zu verwenden: Einer Anwendung wird ein Benutzer zugewiesen, der ausschließlich das Privileg
CREATE SESSION besitzt. Dieser Benutzer kann auch bei Bedarf über einen Connection Pool eine
Reihe von Verbindungen zur Datenbank aufbauen, die von den Anwendern der Anwendung genutzt
werden. Seit Oracle Database 10g Release 2 wurde die Möglichkeit, mit Proxy Benutzern
zu arbeiten, auch für den Zugriff über SQL*Plus eingerichtet. Das ermöglicht für diesen Beitrag
einen einfachen Einstieg in das Arbeiten mit Proxy Benutzern.
In unserem Szenario soll ein Anwender seine eigenen Berechtigungen nutzen. Der Einfachheit halber
wird der Benutzer SCOTT verwendet. Er verfügt über einen eigenen Account mit eigenen Privilegien
in der Datenbank. Das Szenario nutzt zwar SQL*Plus, aber die Anmeldung bei der Datenbank könnte
ebenso über eine Anwendung von einem Applikationsserver aus erfolgen. Die Anwendung hat einen
eigenen Benutzer (PROXYBENUTZER), benötigt aber keinerlei weitere Privilegien. PROXYBENUTZER
benötigt nicht einmal das Recht CREATE SESSION. Es wird hier zusätzlich vergeben, um später
verdeutlichen zu können, dass tatsächlich unterschiedliche Sessions aufgebaut werden können.
Die nächste Abbildung zeigt, wie der Benutzer PROXYBENUTZER angelegt wird. Damit sich
SCOTT über PROXYBENUTZER einloggen kann, muss er dazu ausdrücklich ermächtigt
werden. Das geschieht mit dem Befehl ALTER USER.
Wie in der folgenden Abbildung zu erkennen ist, zeigt der Enterprise Manager für
PROXYBENUTZER an, wer sich über ihn einloggen kann. Die Abbildung zeigt auch, dass für jeden
Anwender gelistet wird, über welchen Proxy User ein Verbindungsaufbau
möglich ist (Feld Proxy Users).
Zum Vergrößern auf das Bild klicken, zurück zum Artikel mit dem Back-Button des Browser
Die Authentifizierung von SCOTT geschieht durch Passworteingabe - und zwar durch das Passwort von
PROXYBENUTZER. Alternativ und mit leicht anderer Syntax
des Befehls ALTER USER könnte die Authentifizierung auch über den distinguished name
oder ein Zertifikat erfolgen. In unserem Fall sieht das Einloggen oder CONNECT
folgendermassen aus
Die eckigen Klammern sind in SQL*Plus verbindlich für die Kennzeichnung des Benutzers, für den
die Session aufgebaut wird.
Die folgende Abbildung zeigt zunächst, dass PROXYBENUTZER sich durchaus unter seinem Namen
anmelden kann. Er hat ja schließlich das Recht CREATE SESSION erhalten. Weil PROXYBENUTZER
keine Rechte auf die Tabelle EMP hat, erhält er beim Versuch, die Tabelle
zu lesen, natürlich eine Fehlermeldung.
Danach meldet sich SCOTT über PROXYBENUTZER an und erhält eine Session unter seinem
eigenen Namen. Er kann alle seine Privilegien aus der Proxysession heraus nutzen. Deshalb ist
sein SELECT auch erfolgreich. Und auch der Audit Trail (DB,EXTENDED) macht deutlich, dass alle
Aktionen korrekt erfasst werden: Das erfolglose SELECT von PROXYBENUTZER ebenso wie das
von SCOTT ausgeführte erfolgreiche SELECT.
Zum Vergrößern auf das Bild klicken, zurück zum Artikel mit dem Back-Button des Browser
Natürlich lassen sich alle Informationen über die Proxy Benutzer nicht nur über den
Enterprise Manager, sondern auch über SELECTs aus den Data Dictionary Views nachvollziehen.
- DBA_PROXIES enthält Informationen zu allen Proxy Benutzern.
- USER_PROXIES enthält die Informationen zu den Benutzern, für die der angemeldete
Benutzer als Proxy zur Verfügung steht.
- PROXY_USERS zeigt wer mit welchen Proxy Usern arbeiten kann.
- Je nach Situation enthält auch V$SESSION in den Spalten PROGRAM und MODULE unter Umständen
Informationen zum Proxy Benutzer.
Zurück zur Community-Seite
|