Proxy-User

In mehrschichtigen Architekturen ist es gängig, dass ein Application Server mehrere Verbindungen zur Datenbank auf Vorrat aufbaut (ein sog. Connection Pool). Häufig geschieht das mit einem einzigen Benutzerkonto, was den Nachteil hat, dass

  • diesem Benutzerkonto alle möglichen Rechte für verschiedene Anwendungsteile zugeteilt werden müssen und
  • dadurch einzelne Anwendungsteile sämtliche dieser Rechte in der Datenbank wahrnehmen können, was ein Sicherheitsrisiko bedeuten kann;
  • bei der Fehlerdiagnose oder bei Sicherheits-Audits Datenbank-seitig nicht nachvollzogen werden kann, welcher Benutzer welche Aktion durchgeführt hat, da immer nur das eine Benutzerkonto des Servers verwendet wird.

Ursächlich ist dafür leider oft einfach nur fehlendes Wissen über die vielfältigen, ausgereiften Möglichkeiten, die die Oracle-Datenbank in puncto Sicherheit zu bieten hat. Und so wird das Rad immer wieder aufs Neue erfunden, indem etliche Sicherheitsfunktionen neu – und damit potentiell fehlerhaft – in eine Anwendung hinein programmiert werden und die Anwendung sich dann vielleicht auch noch mit einem Benutzer zur Datenbank verbindet, der jegliche Tabelle lesen und jegliche Prozedur ausführen darf! Da ist der nächste Skandal um Datendiebstahl buchstäblich vorprogrammiert.

Eine übliche und naheliegende Methode ist es, für jeden realen Benutzer auch ein Benutzerkonto auf der Datenbank einzurichten und diesem Konto dann die Rollen und Rechte zuzuteilen, die für das Aufgabengebiet des jeweiligen Benutzers unbedingt erforderlich sind. Die eigentlichen Anwendungsdaten liegen dann in einem separaten Schema, auf das – idealerweise über Views – von den Benutzern lesend oder schreibend zugegriffen wird.

Oftmals werden Benutzer in Unternehmensanwendungen aber bereits außerhalb der Datenbank authentifiziert. Wie aber verbindet man sich nun weiter zur Datenbank, ohne erneut ein Passwort abzufragen oder, schlimmer noch, es irgendwo abgespeichert vorzuhalten?

Oracles Antwort darauf lautet: Über Proxy-Rechte. Diese erlauben es einem Benutzer, sich, gegebenenfalls ohne erneute Authentifizierung, unter einem anderen Benutzer zu verbinden.

Dazu muss das Benutzerkonto, zu dem eine Verbindung durch einen anderen Benutzer aufgebaut werden darf, geändert werden, indem man den oder die erlaubten Proxy-User dort einträgt. Wollen wir z.B. einem Application Server unter dem Benutzerkonto „appserver“ Zugriff auf den Benutzer „drkloebner“ erlauben, dann ändern wir den Benutzer „drkloebner“ wie folgt:

ALTER USER drkloebner
  GRANT CONNECT THROUGH appserver
  WITH ROLE bademeister;

Die „WITH ROLE“-Klausel schränkt zusätzlich die Rollen ein, die ein auf diese Weise verbundener Benutzer aktivieren darf. Wird sie weggelassen, dürfen alle Rollen des Benutzers aktiviert werden. Auch die Schreibweise „WITH ROLE ALL EXCEPT …“ ist zulässig.

Der Benutzer „appserver“ kann sich nun als „drkloebner“ verbinden. Die Konfiguration der Verbindung hängt von der Anwendung ab, aber ab Oracle 10.2 lässt sich das auch unter SQL*Plus testen:

CONNECT appserver[drkloebner]/appserver_passwort

Voilá! Nun kann dem User „appserver“ ausschließlich das Systemprivileg „CREATE SESSION“ zugeteilt werden. Alle weiteren Aktionen der Anwendung, die sich über den Proxy-User „appserver“ verbindet, sollten nun nur noch mit den Ziel-Benutzern ausgeführt werden.

Unter Java kann das dann so aussehen:

…
  Properties proConProps = new Properties();
  proConProps.put("PROXY_USER_NAME", "drkloebner");
  OracleConnection conn = (OracleConnection) DriverManager.getConnection(
      "jdbc:oracle:thin:appserver/passwort@localhost:1521:orcl",
      proConProps);
  conn.openProxySession(OracleConnection.PROXYTYPE_USER_NAME, proConProps);
…

Siehe auch

http://www.it-eye.nl/weblog/2005/09/12/oracle-proxy-users-by-example/

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Oracle/Proxy

http://www.oratransplant.nl/2006/11/15/using-proxy-authentication-with-sqlplus/

Ein Gedanke zu „Proxy-User

  1. Pingback: DBMS_SESSION: Anwender und Sessions mehrschichtiger Anwendungen in der DB identifizieren « Oraculix

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s