Logo Oracle Deutschland   DBA Community
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.

CREATE USER proxybenutzer IDENTIFIED BY proxypasswort;

GRANT create session TO PROXYBENUTZER;

ALTER USER scott GRANT CONNECT THROUGH proxybenutzer;
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).

Informationen zum Proxybenutzer in Database Control
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
sqlplus proxybenutzer[scott]/proxypasswort

connect proxybenutzer[scott]/proxypasswort
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.

Mit dem Proxybenutzer arbeiten
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