Einleitung

In dem Beispiel ist der LDAP-Server ein Windows Server 2019. Der Server ist zugleich auch der Domänen-Controller.

Die Domäne trägt den Namen "DEMO.LOCAL" .

 

Die Anleitung bezieht sich auf die Verwendung des Packages DBMS_LDAP.

Für die Kommunikation mit dem Active-Directory über LDAPs (SSL) werden die aufgeführten Zertifikate benötigt.

Zertifikate:

# Wir benutzen, da es sehr einfach geht, das Root-Zertifikat von DEMO.LOCAL
demo.local_DER_Codierung.cer

 

ACL anpassen

Den SQL als SYSTEM oder SYS auführen.

ACL anlegen:

begin
    
    dbms_network_acl_admin.create_acl(
      acl =>         'ldaps.xml',
      description => 'LDAPs Kommunikation zum AD',
      principal =>   'PUBLIC', -- PARSING SCHEMA der Anwendung
      is_grant =>    true,
      privilege =>   'connect'
    );
    DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
      acl =>         'ldaps.xml',
      principal =>   'PUBLIC', -- PARSING SCHEMA der Anwendung
      is_grant  =>   true,
      privilege =>   'resolve'
    );
    dbms_network_acl_admin.assign_acl(
      acl =>         'ldaps.xml',
      host =>        'demo.local',
      lower_port =>  636,
      upper_port =>  636
    );
  end;

ACL prüfen:

select * from DBA_NETWORK_ACLS;
select * from DBA_NETWORK_ACL_PRIVILEGES;

ACL löschen:

begin
  dbms_network_acl_admin.drop_acl(acl =>         'ldaps.xml');
end;
/

Wallet mit orapki erstellen

Oracle Doku: Managing Public Key Infrastructure (PKI) Elements

Das Wallet wird unter /app/oracle/ldap_wallet gespeichert.

Wallet erstellen:

# -wallet wallet_loc
# pwd Wallet Passwort
#orapki wallet create -wallet <WALLET_DIR> -auto_login -pwd <PASSWORT>
#Beispiel
orapki wallet create -wallet /app/oracle/ldap_wallet -auto_login -pwd Oracle123

Zertifikate hinzufügen:

# -wallet wallet_loc
# pwd Wallet Passwort
# -cert Zertifikat
#orapki wallet add -wallet <WALLET_DIR> -pwd <PASSWORT>  -trusted_cert -cert "<ZERTIFIKAT>"
#Beispiel
orapki wallet add -wallet /app/oracle/ldap_wallet -pwd Oracle123  -trusted_cert -cert "/mnt/hgfs/installs/Zertifikate/demo.local_DER_Codierung.cer"

Zertifikate anzeigen:

# -wallet wallet_loc
# pwd Wallet Passwort
#orapki wallet display -wallet <WALLET_DIR> -pwd <PASSWORT>
#Beispiel:
orapki wallet display -wallet /app/oracle/ldap_wallet -pwd Oracle123
 
$ orapki wallet display -wallet /app/oracle/ldap_wallet -pwd Oracle123
Oracle PKI Tool Release 21.0.0.0.0 - Production
Version 21.0.0.0.0
Copyright (c) 2004, 2020, Oracle and/or its affiliates. All rights reserved.

Requested Certificates: 
User Certificates:
Trusted Certificates: 
Subject:        CN=demo-DC1-CA,DC=demo,DC=local

[oracle@prod-db1@PROD] /app/oracle/ldap_wallet

 

Wallet mit Oracle Wallet Manager (owm) erstellen

Oracle Doku: Using Oracle Wallet Manager

Zur Ausführung von "owm" ist ein X-Window System erforderlich.

Der owm wird mit dem Kommando owm gestartet.

Neues Wallet anlegen:

Mit Ja bestätigen:

Passwort vergeben:

Mit „nein“ Antworten, keine Zertifikatsanforderung erstellen:

Die Zertifikate importieren:

Nach dem Import sollten die aufgeführten Zertifikate vorhanden sein:

Das Wallet nun noch speichern:

Die automatische Anmeldung aktivieren und nochmals speichern:

DBMS_LDAP Anpassungen

Das Wallet muss sich auf allen Datenbank-Servern im gleichen Verzeichnis befinden.

Da der Wallet-Path im Quelltext verankert ist.

LDAP:

declare
l_session      DBMS_LDAP.session;
l_retval       PLS_INTEGER; 
 
begin 
l_session := DBMS_LDAP.init(hostname => 'demo.local',
                              portnum  => 389);
 
  
  l_retval := DBMS_LDAP.simple_bind_s(ld     => l_session,
                                      dn     => Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!',
                                      passwd => 'Oracle123');
end;
/

LDAPS:

declare
l_session      DBMS_LDAP.session;
l_retval       PLS_INTEGER; 
 
begin
l_session := DBMS_LDAP.init(hostname => 'demo.local',
                              portnum  => 636);
 
  -- Nur für LDAPs
  -- l_retval:= dbms_ldap.open_ssl(l_session, <WALLET_LOC>, <WALLET_PASSWORT>,<MUSS FÜR AD 2 SEIN>);
  l_retval:= dbms_ldap.open_ssl(l_session, 'file:/app/oracle/ldap_wallet', 'Change_on_Install',2);
 
 
 
  l_retval := DBMS_LDAP.simple_bind_s(ld     => l_session,
                                      dn     => Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!',
                                      passwd => 'Oracle123');
end;
/

 

Prüfen der Konfiguration

Hierzug kann das Package "USERMGR" aus dem Schema  "USERMGR" genutzt werden.

Was das Package und das Schema USERMGR ist wir in Automatisierte Benutzerverwaltung erklärt.

SQL*Plus:

SQL> col displayname format a30;
SQL> col mail format a30;
SQL> col cn format a30;
SQL> col description format a30;
SQL> 
SQL>  select 
SQL>   usermgr.get_user_attributes('333666', 'cn') as cn, 
SQL>   usermgr.get_user_attributes('333666', 'displayName') as displayname, 
SQL>   usermgr.get_user_attributes('333666', 'mail') as mail,
SQL>   usermgr.get_user_attributes('333666', 'description') as description 
SQL>  from dual;

CN                             DISPLAYNAME                    MAIL                           DESCRIPTION
------------------------------ ------------------------------ ------------------------------ ------------------------------
333666                         Schmitt, Xaver                 oracle@localhost               Testuser 

 

Troubleshooting

Siehe Oracle Support:

How to Enable Client Side DBMS_LDAP Tracing (Doc ID 250256.1)