DOAG 2010 Kerberos für die Datenbank Dr. Günter Unbescheid Database Consult GmbH Jachenau
Database Consult GmbH Gegründet 1996 Kompetenzen im Umfeld von ORACLE-basierten Systemen Tätigkeitsbereiche Tuning, Installation, Konfiguration Security, Identity Management Expertisen/Gutachten Support, Troubleshooting, DBA-Aufgaben Datenmodellierung und design Datenbankdesign, Systemanalysen Programmierung: SQL,PL/SQL,Java, JSP, ADF, BC4J Workshops www.database-consult.de Folie 2 von 36
Agenda Einführung Kerberos Konfiguration Kerberos Datenbank Kerberos - Datenbank LDAP-Dienst Ausblick: Erweiterte Möglichkeiten der LDAP Einbindung Folie 3 von 36
Einführung Kerberos Folie 4 von 36 4
Kerberos -- Anmeldung als guenter@dbc.de sqlplus /@targetdb SQL> show user USER is "GUENTER@DBC.DE" -- Alternativ: Anmeldung als guenter@dbc.de sqlplus /@targetdb SQL> show user USER is "SHAREUSER" SELECT global_name, user, sys_context('userenv','external_name') external_user FROM global_name; GLOBAL_NAME USER EXTERNAL_USER -------------------- ---------- -------------------------------- TARGETDB.DBC.DE SHAREUSER cn=guenter,cn=users,dc=dbc,dc=de Folie 5 von 36
Kerberos Verteilter Autentifizierungsdienst SSO Prinzip Basis symmetrische Kryptografie Kerberos 5 Netzwerkdienst als trusted third party Von Microsoft genutzt als Standardprotokoll für die Authentifizierung Ideale Benutzerbasis in Windowsnetzwerken Tools zur Nutzung unter Unix & CO. Anmeldung als /@zieldb Verbunden mit gleichnamigem "externen" DB-User Folie 6 von 36
Kerberos Ablauf Resource Benutzer > Authentication Request > Anforderung Service Ticket (Ressource,TGT,Authent.) < Ticket mit Auth. an Service > Service bestätigt Weitere Kommunikation KDC Ticket Granting Server (TGS) Authentication Server (AS) > *AS < Response mit TGT, Sitzungsschlüssel > *TGS < Ticket, Sitzungsschlüssel verschlüsselt oder nicht Tickets sind immer nur vom Target lesbar Folie 7 von 36
Kerberos okinit testuser sqlplus /@zieldb Oracle-User: testuser@dbc.de (entsprechend Principal Name) Folie 8 von 36
Kerberos (Unix Umfeld) okinit testuser Kerberos Utilities for Solaris: Version 10.2.0.1.0 Production on 03-MAY-2010 16:57:49 Copyright (c) 1996, 2004 Oracle. All rights reserved. Password for testuser@dbc.de: oklist Kerberos Utilities for Solaris: Version 10.2.0.1.0 Production on 03-MAY-2010 16:59:46 Copyright (c) 1996, 2004 Oracle. All rights reserved. Ticket cache: /opt/oracle/1020client/network/krb5/krbcache Default principal: testuser@dbc.de Valid Starting Expires Principal 03-May-2010 16:58:04 04-May-2010 00:57:49 krbtgt/dbc.de@dbc.de sqlplus /@zieldb Folie 9 von 36
Kerberos Konfiguration Folie 10 von 36 10
Kerberos-Konfiguration (kurz) Lizenz: Advanced Security Option Anlegen Principal User, anhängen Service Principal Name (AD) Konfigurationsdateien sqlnet.ora und krb5.conf (Client/Server) unter Windows: krb5.ini Keyfile auf den/die DB-Server kopieren enthält Credentials Datenbank-User mit entsprechendem Principal Name ktpass -princ oracle/testserver01@dbc.de -mapuser testserver01 -pass password123 DesOnly -crypto des-cbc-crc -ptype KRB5_NT_PRINCIPAL kvno 1 out C:\Users\keytab.testserver01 -------------------- CREATE USER "TESTUSER@DBC.DE" IDENTIFIED EXTERNALLY; Folie 11 von 36
Konfiguration Lizenz: Advanced Security Option Extra der Enterprise Edition Client Type Administrotor/Custom JDBC [thick, thin (>= 11gR1)] Unix: Kommando adapters Network Manager (netmgr) unter Profil der Bereich Oracle Advanced Security opatch lsinventory detail oh <oracle home>... Oracle Advanced Security 11.2.0.1.0... ########### a d a p t e r s ######### Installed Oracle Net transport protocols are:... Installed Oracle Net naming methods are: Installed Oracle Advanced Security options are: Folie 12 von 36
Konfiguration Kerberos Principal <Name> für die Zuordnung des symmetrischen Schlüssels Format: <servicename>/<hostname>@<realm> <hostname> als "user account", use DES encryption aktivieren Service Principal Name ## AD Konsole [General tab] First name: testserver01 Display name: testserver01 Password: <beliebiges Kennwort> [Account tab:] User logon name: testserver01@dbc.de User logon name (pre-windows 2000): DBC\testserver01 ########################################## ktpass -princ oracle/testserver01@dbc.de -mapuser testserver01 -pass password123 -DesOnly -crypto des-cbc-crc -ptype KRB5_NT_PRINCIPAL kvno 1 out C:\Users\keytab.testserver01 Folie 13 von 36
Konfiguration -- Kontrolle setspn -L testserver01 Registered ServicePrincipalNames for CN=testserver01,CN=Users,DC=dbc,DC=de: oracle/testserver01 ### Kopieren auf den betreffenden DB-Server ### Kontrolle oklist -k t /<pfad>/<keyfile> Kerberos Utilities for Solaris: Version 10.2.0.1.0 - Production on 30-APR-2010 11:42:37 Copyright (c) 1996, 2004 Oracle. All rights reserved. Service Key Table: /u01/app/oracle/product/1020/network/krb5/keytab.testserver01 Ver Timestamp Principal 1 01-Jan-1970 01:00:00 oracle/testserver01@dbc.de Folie 14 von 36
Konfiguration CLIENTSEITE sqlnet.ora (Windows System) NAMES.DIRECTORY_PATH= (TNSNAMES) SQLNET.AUTHENTICATION_SERVICES = (kerberos5) # Erreichbarkeit KDC SQLNET.KERBEROS5_CONF = c:\windows\krb5.ini # Credential Cache (TPT usw.) SQLNET.KERBEROS5_CC_NAME = OSMSFT:// # SQLNET.KERBEROS5_CC_NAME = /opt/oracle/1020client/network/krb5/krbcache SQLNET.KERBEROS5_CONF_MIT = true SQLNET.AUTHENTICATION_KERBEROS5_SERVICE = oracle SERVERSEITE sqlnet.ora NAMES.DIRECTORY_PATH= (TNSNAMES) SQLNET.AUTHENTICATION_SERVICES = (kerberos5) SQLNET.KERBEROS5_CONF = /u01/oracle/1020client/network/krb5/krb5.conf SQLNET.KERBEROS5_CC_NAME = /opt/oracle/1020client/network/krb5/krbcache SQLNET.KERBEROS5_CONF_MIT = true SQLNET.AUTHENTICATION_KERBEROS5_SERVICE = oracle SQLNET.KERBEROS5_KEYTAB = /u01/oracle/product/krb5/keytab.testserver01 Folie 15 von 36
Konfiguration Serviceticket-Anforderung über Host-Klausel des tnsnames-eintrages hostname auf Zielserver ergänzt durch Eigeneintrag von /etc/hosts ergänzt durch Kerberos5 Servicename SERVERSEITE sqlnet.ora (krb5.ini/krb5.conf) mit Zeitversatz [libdefaults] default_realm = DBC.DE clockskew = 3000 [realms] DBC.DE = { kdc = adnet.dbc.de } [domain_realm].dbc.de = DBC.DE dbc.de = DBC.DE ##### /etc/hosts <dbserver IP> testserver01.dbc.de testserver01 Folie 16 von 36
Konfiguration ########## AD Enduser ####################### Username/DN CN=testuser,CN=Users,DC=dbc,DC=de Logon Name testuser@dbc.de msds-principalname DBC\testuser userprincipalname testuser@dbc.de ########## DB ######################## CREATE USER "TESTUSER@DBC.DE" IDENTIFIED EXTERNALLY; GRANT connect, resource TO "TESTUSER@DBC.DE"; ########## Client-Seite ############### okinit testuser Kerberos Utilities for Solaris: Version 10.2.0.1.0 - Production on 03-MAY-2010 16:57:49 Copyright (c) 1996, 2004 Oracle. All rights reserved. Password for testuser@dbc.de: Folie 17 von 36
Konfiguration # Server: Tracing Logging nur im Bedarfsfall TRACE_LEVEL_SERVER = SUPPORT TRACE_FILE_SERVER = NETserver.ora TRACE_DIRECTORY_SERVER = /u01/app/oracle/product/1020/network/network/trace TRACE_TIMESTAMP_SERVER = TRUE # Client: Tracing Logging nur im Bedarfsfall TRACE_LEVEL_CLIENT=16 TRACE_DIRECTORY_CLIENT=/u01/oracle/1020client/network/network/trace TRACE_UNIQUE_CLIENT=on TRACE_FILE_CLIENT=kerb_client # Okinit: Tracing TRACE_LEVEL_OKINIT=16 TRACE_DIRECTORY_OKINIT=/u01/oracle/1020client/network/network/trace TRACE_FILE_OKINIT=kerb_okinit Folie 18 von 36
Kerberos Kerberos authentifiziert. Authorisierung erfolgt separat. Weitere Konfigurationsmöglichkeiten: Kombination mit Enterprise Usern: Kerberos User mapped auf shared schema Umleitung auf proxy user Tool/API Unterstützung, u.a. SQL Developer (über OCI/thick driver) JDBC thin und thick Folie 19 von 36
Kerberos - Datenbank LDAP-Dienst Folie 20 von 36 20
Authentifizierungsvarianten Folie 21 von 36
Komponenten Produkte/Lizenzen DB: Enterprise Edition DB: ASO für Authenfitizierungen ausser Password OID/OVD Bestandteil von Identity Management von OFM (11g) Verzeichnisdienst Oracle Internet Directory (OID) + Repository Active Directory (AD) alternativ/zusätzlich ggf. Oracle Virtual Directory als Frontend zur Integration Weblogic Server Admin Oberflächen OID/OVD Folie 22 von 36
Enterprise User/Roles LDAP-Verzeichnisdienst Benutzer (enterprise user), Rollen (enterprise roles) registrierte Datenbanken, Mappings Authentifizierung über PW, Zertifikat, Kerberos Datenbank(en) Globale Benutzer, Globale Rollen Verbindung zum Verzeichnisdienst (ldap.ora) Motivation Zentralisierung der Benutzerverwaltung Reduktion der lokalen DB-Administration Folie 23 von 36
Enterprise Benutzer Folie 24 von 36
EUS Modell 1 OID für Benutzer und Metadaten Authentifizierung per Kerberos Ticket über die Datenbank Mapping auf Principal Name eines Enterprise Users Zuordnung auf shared schema + Global Role der Ziel-Datenbank Folie 25 von 36
Procedere RDBMS-Software lt. Zertifizierungsmatrix installieren Repository Datenbank anlegen UTF8 Zeichens. Weblogic Software installieren (java jar) OFM IDM Software installieren (OUI) Patch Sets für WLS + IDM Konfiguration von WLS/IDM WLS Domäne mit Admin Server + Managed Server ldap.ora, Registrierung DBs, Shared Schemas, Roles Enterprise User + Roles einrichten Global Users und Roles in den Zielsystemen Folie 26 von 36
Procedere Verbindung Datenbank OID/LDAP über ldap.ora Erstellen manuell oder per Net Configuration Assistant Auswahl von DIRECTORY USAGE CONFIGURATION Admin Kontext verweist auf Metadaten -- ldap.ora DIRECTORY_SERVERS= (oidserver:6051:6055) DEFAULT_ADMIN_CONTEXT = "dc=dbc,dc=de" DIRECTORY_SERVER_TYPE = OID Folie 27 von 36
Procedere Registrierung der Datenbank über Database Configuration Assistant (dbca) silent Mode mit Response Datei ist möglich Dadurch: Eintrag im OID unter Admin Kontext, Wallet-Aufbau Einrichten/prüfen init.ora -- Response-Datei (Ausschnitt) -- Aufruf: dbca -silent -responsefile dbcaldap.rsp PERATION_TYPE = "configuredatabase" [CONFIGUREDATABASE] SOURCEDB = "orcl" REGISTERWITHDIRSERVICE= TRUE DIRSERVICEUSERNAME= "name" DIRSERVICEPASSWORD= "password" WALLETPASSWORD= "password" DIRECTORY_SERVERS= (oidserver:6051:6055) DEFAULT_ADMIN_CONTEXT = "dc=dbc,dc=de" DIRECTORY_SERVER_TYPE = OID Folie 28 von 36
Procedere -- Prüfung des Wallet in $ORACLE_HOME/admin/<SID>/wallet mkstore -wrl. -viewentry ORACLE.SECURITY.DN mkstore -wrl. -viewentry ORACLE.SECURITY.PASSWORD -- init.ora ldap_directory_access = PASSWORD rdbms_server_dn = 'cn=t1,cn=oraclecontext,dc=dbc,dc=de -- Verbindungskontrolle zum Verzeichnisdienst mit PW aus dem Wallet ldapbind -h <ldaphost> -p <non-ssl-port> \ -D "cn=t1,cn=oraclecontext,dc=fra,dc=bb,dc=de" -w "DB pwd" ldapbind -h <ldaphost> -p <non-ssl-port> \ -W "file:/opt/oracle/1020/admin/t1/wallet" -P "wallet pwd" -- Datenbank CREATE USER jedermann PROFILE "DEFAULT" IDENTIFIED GLOBALLY AS ''; GRANT CREATE SESSION TO jedermann; CREATE ROLE r_global1 IDENTIFIED GLOBALLY; GRANT <provilege> TO r_global1; -- kein grant an User möglich Folie 29 von 36
Enterprise User Werkzeuge: EM Database Control und Grid Control eusm Command line Tool (ab 11g [ID 1085065.1] ) Enterprise Security Manager (esm) (grafisch 10g) Folie 30 von 36
Enterprise Roles Folie 31 von 36
Erweiterte Möglichkeiten Folie 32 von 36 32
Architekturvarianten Problematik User-Daten Redundanz vermeiden Userstamm in AD ggf. weitere Sourcen: Verzeichnisse, Tabellen etc. Lösungsvarianten OID Directory Integration Plattform (kopieren) OID Server Chaining (verlinken) OVD integriert/verlinkt diverse Verzeichnisse/DBs Trennung von Metadaten und Userdaten Schemaerweiterung für EUS notwendig Password-Problematik ggf. Passwordfilter (für AD) Folie 33 von 36
OVD Nutzung Folie 34 von 36
(Hoch)Verfügbarkeit Folie 35 von 36
Danke für s Zuhören www.database-consult.de Folie 36 von 36