Usa LDAP per la ricerca del nome con Oracle Instant Client


14

In parte a causa di problemi con versioni in conflitto o testimoni della completa installazione del client Oracle, il mio team di sviluppo (di cui sono membro) si è spostato verso l'utilizzo di Oracle Instant Client ed evitando l'installazione sulle nostre macchine di sviluppo per la maggior parte nuovi progetti. Questo ha funzionato abbastanza bene, fino al punto che abbiamo distribuito alla produzione con questa configurazione. Dato che siamo principalmente un negozio .NET, stiamo usando il client nativo (con wrapper .NET), anziché quello Java.

Ora un client richiede che registriamo il servizio di database con un server LDAP e utilizzi il server LDAP per la ricerca del nome. Hanno fornito sqlnet.orae ldap.orafile (e un file di configurazione di crittografia di accompagnamento) che sembrano essere corretti. In particolare, il sqlnet.orafile specifica LDAP come possibile fonte per la ricerca di nomi di servizi di rete:

names.directory_path=(tnsnames,ldap)

Sono sicuro che la macchina con cui sto lavorando può utilizzare LDAP per accedere al servizio poiché sono stato in grado di farlo utilizzando SQL Developer (che mi ha permesso di inserire direttamente le informazioni LDAP). Supponendo che siano corretti, come posso convincere Instant Client a riconoscere questa configurazione e usare LDAP per la ricerca del nome?

Quello che ho provato finora

Ho provato a impostare la TNS_ADMINvariabile di ambiente sulla directory che contiene i file forniti e, sebbene tnsnames.orafunzioni correttamente per far riconoscere a Instant Client un file, non sembra essere sufficiente per iniziare a guardare LDAP. Ecco i risultati (con percorsi, nomi utente e password modificati):

(I seguenti comandi sembrano essere Prompt dei comandi di Windows, ma immagino che qualcosa di simile sia fattibile su Linux. Il sqlplusvisto qui è anche la versione di Instant, con i binari di Instant Client di accompagnamento nella stessa directory.)

C:\TEMP>SET TNS_ADMIN=C:\path\to\sqlnet\ldap\and\tnsnames\ora\files

C:\TEMP>echo %TNS_ADMIN%
C:\path\to\sqlnet\ldap\and\tnsnames\ora\files

C:\TEMP>sqlplus.exe USERNAME/PASSWORD@LOCALTNSNAME

SQL*Plus: Release 11.2.0.2.0 Production on Mon Jul 7 10:22:25 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Produ
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

C:\TEMP>sqlplus.exe USERNAME/PASSWORD@LDAPTNSNAME

SQL*Plus: Release 11.2.0.2.0 Production on Mon Jul 7 10:24:21 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

Nota a margine

Esistono tag per TNS, LDAP o Instant Client (o anche solo un normale client Oracle) che potrebbero essere aggiunti a questa domanda? Non sono riuscito a trovarne nessuno.


È l'eseguibile corretto? "dove sqlplus"
Bjarte Brandt

@BjarteBrandt Sì, è quello che mi aspetto che sia quando corro where( C:\TEMP\sqlplus.exe). Per essere più specifici, sqlplusnon è "installato" sulla macchina. Si trova semplicemente nella directory corrente, con i file binari del client accanto. Sta sicuramente riprendendo il tnsnames.orafile usando la TNS_ADMINvariabile d'ambiente, poiché è disattivata in una directory completamente diversa.
jpmc26

@BjarteBrandt Per confermare che utilizza i file binari client giusti, sono andato avanti e ho anche corso where oci.dll. Si dà anche il risultato atteso: C:\TEMP\oci.dll.
jpmc26,

potrebbe essere un problema di dominio. Hai provato anche con il nome FQ? (dbname_or_whatever.domainname)
ik_zelf

2
@ ora-600 Siamo spiacenti, ho dimenticato questa domanda. Si è rivelato essere un problema con i file di configurazione stessi, che ci sono stati forniti dal nostro cliente. (Forse il file di configurazione Kerberos; non riesco a ricordare a mano libera.) La cosa divertente è che stavo lavorando in un ambiente di sviluppo cercando di farlo, era ugualmente problematico farlo funzionare in scena, e non lo è ancora lavorando in prod per quanto ne so. (Abbiamo finito per usare un nome TNS locale per far funzionare l'app.) Sicuramente sprecato soldi per il progetto; anche se / quando funziona in prod, l'utile sul capitale investito sarebbe minimo rispetto al costo.
jpmc26,

Risposte:


1

Inserire i file sqlnet.orae ldap.oranella $ORACLE_ADMINdirectory e assicurarsi di impostare le variabili di ambiente. Ho creato il mio TNS_ADMINelenco

(Linux) il mio .bashrc

export TNS_ADMIN=/opt/oracle/instantclient_12_1/network/admin
export ORACLE_ADMIN=${TNS_ADMIN}

[ku14lts:/opt/oracle/instantclient_12_1/network/admin]
$ ls
ldap.ora  sqlnet.ora  tnsnames.ora

E sono stato in grado di connettermi a un DB non nel mio tnsnames.ora

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.