Datenbank-gestützte Authentifizierung und Autorisierung von Web-Applikationen Dr. Günter Unbescheid Database Consult GmbH - Jachenau Database Consult GmbH Authentifizierung und Autorisierung von Web-Applikationen • • • Gegründet 1996 Kompetenzen im Umfeld von ORACLE-basierten Systemen Tätigkeitsbereiche – – – – – – – – Version 10-2005 Tuning, Installation, Konfiguration Support, Troubleshooting, DBA-Aufgaben Datenmodellierung und –design Datenbankdesign, Systemanalysen Programmierung: SQL,PL/SQL,JSP, ADF UIX, BC4J Schulungen Expertise www.database-consult.de ©Database Consult GmbH - Jachenau Folie 2 von 31 Prolog Internetprogramme, auch Webanwendungen genannt, sind Anwendungen, die auf einem Webserver ausgeführt werden und dann in einem Browser dargestellt werden. Kategorien von WA u.a.: Transaktionale Webanwendungen (Erweiterung um den Bereich Datenbanken) Wikipedia Version 10-2005 ©Database Consult GmbH - Jachenau Folie 3 von 31 Authentifizierung und Autorisierung von Web-Applikationen - Datenbanken steuern immer häufiger die Aufbereitung dynamischer Web-Seiten - Die intensive Eingabe und Modifikation von Daten stellt zusätzliche Anforderungen an Authentifizierung und Autorisierung - Durch multiple Nutzungskontexte sollte AA auch über DB abgesichert werden - Das Datenmodell ist i.d.R. dauerhafter als die Präsentationsschichten Agenda Authentifizierung und Autorisierung von Web-Applikationen • • • • • • Einführung: Application Server und Datenbanken Connection – Session – Authentifizierung Secure Application Roles und Client Identifier Proxy Authentication Virtual Private Database Auditing Stand der Technik: Oracle 10g Release 2 Version 10-2005 ©Database Consult GmbH - Jachenau Folie 4 von 31 Einführung Authentifizierung und Autorisierung von Web-Applikationen Datenbank Einheit von Session und Connection ++ Version 10-2005 ©Database Consult GmbH - Jachenau Folie 5 von 31 Einführung Authentifizierung und Autorisierung von Web-Applikationen Application Server Stateless Requests über HTTP(S) + Version 10-2005 ©Database Consult GmbH - Jachenau Folie 6 von 31 Einführung Application Server Datenbank Stateless Requests + Version 10-2005 ©Database Consult GmbH - Jachenau Folie 7 von 31 Authentifizierung und Autorisierung von Web-Applikationen „Permanente“ Verbindung Connection Pool • • Authentifizierung und Autorisierung von Web-Applikationen Application Server Datenbank Wiederverwendung physischer Datenbankverbindungen Konfigurierbarer Aufbau – Minimale und maximale Anzahl physischer Verbindungen – Maximale Idle-Zeiten zum Abbau der Verbindung • Ähnelt Multithreaded Server der Datenbank Version 10-2005 ©Database Consult GmbH - Jachenau Folie 8 von 31 Grundmodell Version 10-2005 ©Database Consult GmbH - Jachenau Folie 9 von 31 Authentifizierung und Autorisierung von Web-Applikationen • Zentraler, fest codierter Applikationsbenutzer auf Seiten des App-Server • Unterschiedliche Endbenutzer mit diversen Privilegienanforderungen • Größtmöglicher Querschnitt aus allen erforderlichen Objektprivilegien für App-Benutzer • ggf. Filterung der erforderlichen Privilegien durch Mittelschicht • Gefahr des Mißbrauchs bei „Quereinstieg“, z.b. ClientServer Applikation Einflussfaktoren Authentifizierung und Autorisierung von Web-Applikationen Session Connection Authentication Authorization Auditing + Version 10-2005 ©Database Consult GmbH - Jachenau Folie 10 von 31 Was – Wo? Strukturelle „Stabilität“ Zentralität Application Server EndUser Authentication Authorization Auditing Version 10-2005 Datenbank ApplicationUser Authentication Authorization Auditing ©Database Consult GmbH - Jachenau Folie 11 von 31 Authentifizierung und Autorisierung von Web-Applikationen „Präsentationsdynamik“ „Pluralität“ Intermezzo: JDBC – Java Standard zur Verbindung zwischen JavaProgrammen/Applicationserver und relationalen Datenbanken – kompatibel mit SQL92 entry level • Implementiert über Standard java.sql Interfaces • Komponenten – Standard JDBC APIs – Oracle Treiber mit spezifischen Erweiterungen zur Unterstützung von Oracle-Datentypen und PerformanceVerbesserungen • Spezifische Erweiterungen über oracle.jdbc Package Version 10-2005 ©Database Consult GmbH - Jachenau Folie 12 von 31 Authentifizierung und Autorisierung von Web-Applikationen • Java Database Connectivity Intermezzo: JDBC – Thin driver: „reiner“ Java-Treiber auf Clientseite ohne OracleClient-Installation für Applets und Anwendungen. Implementiert SQL*Net über Java Sockets mit TCP/IP – OCI-Treiber (thick driver): Treiber auf Clientseite mit OracleClient-Installation für Anwendungen Konvertiert in OCI-Calls • breitere Funktionalität: OCI Connection Pool, TAF – Server-side thin driver: wie thin driver jedoch für Java-Code auf dem Datenbankserver für Zugriffe auf andere Session bzw. Server – Server-side internal driver: Java-Code für Zugriffe innerhalb einer Session Version 10-2005 ©Database Consult GmbH - Jachenau Folie 13 von 31 Authentifizierung und Autorisierung von Web-Applikationen • 3 Ausprägungen Connection Modelle (1) Implicit Connection Cache – JDBC 3.0 kompatible Implementierung des DataSource Interface – Logische Verbindungen (Anforderungen) und physische Verbindungen • • • Verfügbar für thin und thick (OCI) Treiber Ein Cache pro DataSource Instance möglich mit unterschiedlichen Benutzer-Authentifikationen. Cache Properties: MinLimit, MaxLimit, InitialLimit,Timout-Properties + Version 10-2005 ©Database Consult GmbH - Jachenau Folie 14 von 31 Authentifizierung und Autorisierung von Web-Applikationen • Connection Modelle (2) • • • OCI Connection Pooling Verfügbar nur für JDBC OCI Treiber (thick JDBC) Session Mulitplexing von logischen Verbindungen über (wenige) physische Verbindungen Call-Basis Trennung von Session und Connection Codebeispiel siehe Artikel + Version 10-2005 ©Database Consult GmbH - Jachenau Folie 15 von 31 Authentifizierung und Autorisierung von Web-Applikationen • • • Schema-Trennung Authentifizierung und Autorisierung von Web-Applikationen Rollen / current_schema App-User Owner Internal Ux Uy Version 10-2005 ©Database Consult GmbH - Jachenau Folie 16 von 31 Proxy-Authentifizierung Proxy Authentication – Connection/Benutzer A agiert als Proxy für Benutzer B, C, D ….. – Verfügbar für thin und thick JDBC – Proxy-Connections nutzen Caching • Prinzip – Application-Benutzer wird authentifiziert – Datenbank-Endbenutzer gibt Privilegiesierung vor + Version 10-2005 ©Database Consult GmbH - Jachenau Folie 17 von 31 Authentifizierung und Autorisierung von Web-Applikationen • Proxy-Authentifizierung Zu beachten: Datenbank „kennt“ Endbenutzer Datenbank privilegiesiert Endbenutzer App-Benutzer benötigt kein Passwort von Endbenutzer Auditing und Logging kennen Proxy – proxy_sessionid in Tabelle aud$ • Unterschiedliche Möglichkeiten der Authentifizierung (s.u.) • Untermenge von Privilegien ist möglich Version 10-2005 ©Database Consult GmbH - Jachenau Folie 18 von 31 Authentifizierung und Autorisierung von Web-Applikationen • • • • • Proxy-Authentifizierung Version 10-2005 ©Database Consult GmbH - Jachenau Folie 19 von 31 Authentifizierung und Autorisierung von Web-Applikationen -- App-User anlegen CREATE USER application1 IDENTIFIED BY apppwd; -- andere Authentifizierungen sind machbar -- App-User minimal privilegieren GRANT CREATE SESSION TO application1; -- Enduser anlegen und privilegieren CREATE USER enduser1 IDENTIFIED BY endpwd; GRANT r1, r2, r3 TO enduser1; -- (anonymes) Proxy einrichten und privilegisieren ALTER USER client1 GRANT CONNECT THROUGH applikation1 WITH ROLE r2; -- Eingaben überprüfen über View SELECT * FROM DBA_PROXIES; Proxy-Authentifizierung -- (c) unter Angabe von Distinguished Name (noch) CREATE USER gu IDENTIFIED GLOBALLY AS 'CN=gu,OU=Europe,O=dbconsult,L=jachenau,ST=by,C=de'; ALTER USER <usr> GRANT CONNECT THROUGH <appusr> AUTHENTICATED USING DISTINGUISHED NAME; -- (d) unter Nutzung eines DN über Zertifikat ALTER USER <usr> GRANT CONNECT THROUGH <appusr> AUTHENTICATED USING CERTIFICATE TYPE 'X.509' VERSION '3'; Version 10-2005 ©Database Consult GmbH - Jachenau Folie 20 von 31 Authentifizierung und Autorisierung von Web-Applikationen -- Alternativen der Authentifizierung für Enduser -- (a) anonym (ohne Angabe eines PW für Enduser) ALTER USER <usr> GRANT CONNECT THROUGH <appusr>; -- (b) unter Angabe des PW von Enduser ALTER USER <usr> GRANT CONNECT THROUGH <appusr> AUTHENTICATED USING PASSWORD; Proxy-Authentifizierung SCHEMANAME STATUS USERNAME TYPE SERVER ------------ ------------ ------------ --------- ----------CLIENT1 INACTIVE CLIENT1 USER PSEUDO APPLICATION1 INACTIVE APPLICATION1 USER DEDICATED SYSTEM ACTIVE SYSTEM USER DEDICATED Version 10-2005 ©Database Consult GmbH - Jachenau Folie 21 von 31 Authentifizierung und Autorisierung von Web-Applikationen SELECT schemaname, status, username, type, server FROM v$session WHERE username IS NOT NULL; Enterprise User Authentifizierung und Autorisierung von Web-Applikationen enterprise user LDAP enterprise roles shared schema enterprise user global roles Version 10-2005 ©Database Consult GmbH - Jachenau Folie 22 von 31 Enterprise User Proxy Authentifizierung und Autorisierung von Web-Applikationen LDAP enterprise user proxy permissions schema enterprise user ALTER USER local_database_user_name GRANT CONNECT THROUGH ENTERPRISE USERS; Version 10-2005 ©Database Consult GmbH - Jachenau Folie 23 von 31 Client Identifier Authentifizierung und Autorisierung von Web-Applikationen • Beliebige, freibleibende „Markierung“ einer Session – Z.B. mit Namen des Endusers – Nicht zu verwechseln mit „Client Info“ – Zur Sicherheit entsprechende Plausis einbauen • Protokolliert in aud$ • • Enduser müssen nicht in DB eingerichtet sein Authorisierung z.B. über Secure Application Roles + Version 10-2005 ©Database Consult GmbH - Jachenau Folie 24 von 31 Client Identifier Version 10-2005 ©Database Consult GmbH - Jachenau Folie 25 von 31 Authentifizierung und Autorisierung von Web-Applikationen -- Fragment eines Startpakets von Appuser CREATE OR REPLACE PROCEDURE app (user_in IN VARCHAR2) AUTHID CURRENT_USER IS -- diverse Deklarationen BEGIN -- .. je mehr kombiniert wird, desto sicherer IF SYS_CONTEXT ('userenv', 'ip_address') = valid_ip AND SYS_CONTEXT ('userenv', 'host') = valid_host AND SYS_CONTEXT ('userenv', 'external_name') = valid_ext THEN -- Client Identifier wie authentifizierter Benutzer DBMS_SESSION.set_identifier (user_in); -- Rolle Aktivieren DBMS_SESSION.set_role ('DEMO_ENDUSER'); -- etc. Client Identifier Authentifizierung und Autorisierung von Web-Applikationen -- Zugriff auf gesetzten Client Identifier SELECT * FROM my_view WHERE benutzer = SYS_CONTEXT('userenv', 'client_identifier'); -- Löschen… BEGIN DBMS_SESSION.clear_identifier; END; / -- Absicherung der Logik des Startpakets durch Wrap -- SQL-Syntax in Datei, dann auf BS-Ebene: wrap iname=pack.sql -- Verbesserungen unter 10g (siehe nächste Folie) -- … oder in R2: begin dbms_ddl.create_wrapped ('create or replace procedure p1 as begin null; end;') end; / Version 10-2005 ©Database Consult GmbH - Jachenau Folie 26 von 31 Client Identifier 1APP: 1USER_IN: 1VARCHAR2: 1AUTHID: 1CURRENT_USER: 1LV_VALID_IP: 1CONSTANT: 150: 1192.168.13.113: 1LV_VALID_HOST: 1myserver: 1LV_VALID_EXTERNAL: 1cn=guenter,cn=users,dc=dbconsult,dc=de: 1SYS_CONTEXT: Version 10-2005 ©Database Consult GmbH - Jachenau Folie 27 von 31 Authentifizierung und Autorisierung von Web-Applikationen abcd 7 31d 223 abmdzXjvd7hFJQbws1ew0M8o9rQwg/DxzPYVfI4C/mgPUprlymWkSnkGhDxxF2fr8Rr8Qebq ahsRpHmNzZq7yU1Z31JrqHkpOrmtxHjMUkZ6XOdWoQ73J8MrWg72l8Mh4OUFdFQnYKyEicUC JVS1Lsr1pqY/0LCfl9SsuvfdOOktd0Chx0ZnjL9VRgf7RpD4SJjHErG5M4OQ/y60tQKIlYNx Autorisierung Anforderungen – Zentrale App-Accounts mit wechselnden Identitäten/Endbenutzern – Individuelle Privilegisierung (need to know- und least privilege-Prinzip) • Konsequenzen – Keine fest gegranteten Objektprivilegien möglich – Flexible und sichere Schaltung von Rollen: Secure Application Roles + Version 10-2005 ©Database Consult GmbH - Jachenau Folie 28 von 31 Authentifizierung und Autorisierung von Web-Applikationen • Secure Application Roles Authentifizierung und Autorisierung von Web-Applikationen • Rollenaktivierung über prädestinierte Programmeinheiten – Programme sollten Plausibilitäten prüfen • Zuteilung der Rollen an App-Benutzer nicht als Default! -- Die Rollen werden geschaltet über das Schema SECUSER (Locking) CREATE ROLE demo_enduser IDENTIFIED USING secuser.setpriv; -- Aufbau der Programmeinheit -- Kontrolle der angelegten Application Roles SELECT ROLE, SCHEMA, PACKAGE FROM dba_application_roles WHERE SCHEMA = 'SECUSER'; -- Zuteilung der Application Roles an den APP-Benutzer GRANT demo_enduser TO appuser; GRANT EXCUTE ON secuser.setpriv TO appuser; -- Application Roles sollen keine Default Rollen sein: ALTER USER appuser DEFAULT ROLE NONE; Version 10-2005 ©Database Consult GmbH - Jachenau Folie 29 von 31 Secure Application Roles – Implementiert in separatem Security Schema ohne create session Privileg (account lock) • Diverse Plausbilitäten einbauen: – Hierzu sys_context('userenv ', '…') oder v$session – Z.B. authentication_type, ip_address, terminal, programm etc. • Code schützen durch „wrapping“ Version 10-2005 ©Database Consult GmbH - Jachenau Folie 30 von 31 Authentifizierung und Autorisierung von Web-Applikationen • Programmeinheit Virtual Private Database VPD = fine grain access control – Kontext-abhängige, automatische Generierung von where-Klauseln • • Eingeführt unter Version 8, unter 9 und 10 erweitert Komponenten – Anwendungskontexte – kennen name-value-Paare – Policy-Funktionen – erzeugen Where-Klauseln – Policies – verbinden Funktionen, DB-Objekte und Operationen where col = 'x' User A> SELECT * FROM x; User B> SELECT * FROM x; Version 10-2005 where col = 'y' ©Database Consult GmbH - Jachenau Folie 31 von 31 Authentifizierung und Autorisierung von Web-Applikationen • Virtual Private Database Authentifizierung und Autorisierung von Web-Applikationen • Anforderungen bei Webanwendungen – Sessions mit wechselnden Identitäten – Dadurch schnelle und effiziente Anpassung der Kontexte • Technologien – Globale Applikationskontexte • Gespeichert in SGA, d.h. für alle Sessions verfügbar • Können gekoppelt sein an User und Client-Identifier – Funktions, Policies und Policy Groups wie gehabt Version 10-2005 ©Database Consult GmbH - Jachenau Folie 32 von 31 Virtual Private Database Version 10-2005 ©Database Consult GmbH - Jachenau Folie 33 von 31 Authentifizierung und Autorisierung von Web-Applikationen -- Anlegen und autorisieren des globalen Contexts CREATE CONTEXT test_ctx USING secusr.secproc ACCESSED GLOBALLY; -- pauschales aktivieren (für alle) in SECPROC DBMS_SESSION.SET_CONTEXT (namespace => 'test_ctx' ,attribute => ' name1' ,value => ' wert1'); -- Ausschalten DBMS_SESSION.CLEAR_ALL_CONTEXT ('test_ctx'); -- Aktivieren für alle unter Schema USR DBMS_SESSION.SET_CONTEXT (namespace => 'test_ctx' ,attribute => ' name1' ,value => ' wert1' , username => ' USR'); -- zusätzliche Kopplung an Client Identifier DBMS_SESSION.SET_CONTEXT (namespace => 'test_ctx' ,attribute => ' name1' ,value => ' wert1' , username => ' USR',client_id => 'U'); Auditing – – – – – – – – – AUDIT_TYPE Session_id Proxy_sessionid Global_uid Db_user Client_id Ext_name Comment_text (enthält Authentication_Type) Priv_used Version 10-2005 ©Database Consult GmbH - Jachenau Folie 34 von 31 Authentifizierung und Autorisierung von Web-Applikationen • Erweiterte Attribute, zB. DBA_COMMON_AUDIT_TRAIL Authentifizierung und Autorisierung von Web-Applikationen Danke für´s Zuhören Version 10-2005 ©Database Consult GmbH - Jachenau Folie 35 von 31