Inhaltsverzeichnis
Oracle User Proxy Connection verwenden
ab Oracle 9i R2g
Die Idee hinter dem Proxy Connect ist die Anmeldung an einem Schema mit den Credentials eines anderen DB Users, z.b. soll ein persönlicher User sich an dem Schema eines technischen Users anmelden.
D.h. der persönliche User, z.B. ein Datenbank Entwickler, benötigt nicht das Passwort des technischen Schemas um mit diesem Schema zu arbeiten.
Für eine erfolgreiche Anmeldung darf keiner der User gelocked sein. Das Passwort des technischen Users kann aber abgelaufen sein.
ab Oracle 12c
Proxy only connect! Auf das Schema kann nur noch über Proxy zugegriffen werden!
1. User anlegen und Grant connect through auf diesen User erlauben
#create minimal USER CREATE USER gpi identifed BY gpi; GRANT CREATE SESSION TO gpi; #alter the target USER that GPI can CONNECT AS HR ALTER USER HR GRANT CONNECT THROUGH gpi; #oder alternativ mit einer zugewiesenen Rolle ALTER USER HR GRANT CONNECT THROUGH gpi WITH ROLES hr_user_role;
2. An der DB Anmelden mit
sqlplus gpi[HR]@local_db # mit dem Password von GPI anmelden: SQL>SELECT USER FROM dual; USER ----- HR
Überwachen mit:
DB Views
- DBA_PROXIES - Informationen zu allen Proxy Benutzern
- USER_PROXIES - Informationen zu den Schemas, für die der angemeldete User als Proxy verwenden kann
- PROXY_USERS - Wer kann mit welchen Proxy Usern arbeiten
Wer darf sich an diesem Schema anmelden:
SELECT proxy , client , authentication , authorization_constraint , ROLE , proxy_authority FROM dba_proxies WHERE client LIKE UPPER('&&SCHEMA_NAME.') ORDER BY 1 /
Dieser User darf sich an welches Schema anmelden:
SELECT proxy , client , authentication , authorization_constraint , ROLE , proxy_authority FROM dba_proxies WHERE proxy LIKE UPPER('&&USER_NAME.') ORDER BY 1 /
Angemeldeten User in der DB prüfen
In einer User Session
Leider wird der angemeldete Proxy User tatsächlich zum Schema Owner, in den traditionellen View taucht der Name des Proxy Users dann nicht mehr auf.
Eine Möglichkeit ist aber die Abfrage der Umgebung der SQL Session mit:
SELECT SYS_CONTEXT ('USERENV', 'CURRENT_USER') CURRENT_USER , SYS_CONTEXT ('USERENV', 'CURRENT_USERID') CURRENT_USERID , SYS_CONTEXT ('USERENV', 'PROXY_USER') PROXY_USER , SYS_CONTEXT ('USERENV', 'PROXY_USERID') PROXY_USERID , SYS_CONTEXT ('USERENV', 'AUTHENTICATED_IDENTITY') AUTH_IDENT FROM DUAL /
siehe SYS_CONTEXT
Diese Information ließe sich dann wieder verwenden um zum Beispiel eine Spalte wie LAST_UPDATE_USER in der Tabelle mit dem Wert des aktuellen Proxy Users zufüllen.
Auditing
Im Auditing wird die Spalte PROXY_SESSIONID mit der Session ID des Proxy Users gefüllt, auch in der Spalte COMMENT_TEXT kann über das Schlüsselwort „PROXY“ erkannt werden ob hier eine Proxy Connect vorgelegen hat.
SELECT a.username connecting_user , a.action_name, a.timestamp, a.comment_text, b.username proxy_username, b.action_name proxy_action_name, b.comment_text proxy_comment_text FROM dba_audit_trail a INNER JOIN dba_audit_trail b ON (a.proxy_sessionid=b.sessionid) ORDER BY a.timestamp /
Selects über Proxy auditieren
Auditing Proxy Activities:
... Actions taken by proxy connections can be audited with standard database auditing commands such as the following: AUDIT SELECT TABLE ON customers BY midtier ON BEHALF OF karen; AUDIT SELECT TABLE ON customers by acct_mgr ON BEHALF OF all; In either of these cases, the proxy information is included in the audit trail views. ...
aus der Doku.
demnächst mehr
Sicherheitsrisiko
Bei einem Test mit der Oracle XE (11.2.0.2) ist mir aufgefallen, das ein User mit abgelaufenen Passwort sich als Proxy Connect trotzdem anmelden kann.
Unter 12c (12.1.0.2) konnte das Verhalten aber nicht nachvollzogen werden, das scheint inzwischen gefixt zu sein.
Quellen
Stichwort „Lightweight user sessions“: