Use LDAP para buscar nombres con Oracle Instant Client

14

En parte como resultado de tener problemas con versiones conflictivas o de bits con la instalación completa del cliente Oracle, mi equipo de desarrollo (del cual soy miembro) se ha movido hacia el uso de Oracle Instant Client y ha evitado la instalación en nuestras máquinas de desarrollo para la mayoría proyectos nuevos. Esto ha funcionado bastante bien, incluso hasta el punto de implementarlo en producción con esta configuración. Como somos principalmente una tienda .NET, estamos utilizando el cliente nativo (con envoltorios .NET), en lugar del Java.

Ahora un cliente requiere que registremos el servicio de la base de datos con un servidor LDAP y usemos el servidor LDAP para buscar nombres. Han proporcionado sqlnet.oray ldap.oraarchivos (y un archivo de configuración de cifrado adjunto) que parecen ser correctos. En particular, el sqlnet.oraarchivo especifica LDAP como una posible fuente para buscar nombres de servicios de red:

names.directory_path=(tnsnames,ldap)

Estoy seguro de que la máquina con la que estoy trabajando puede usar LDAP para acceder al servicio, ya que pude hacerlo usando SQL Developer (que me permitió ingresar la información de LDAP directamente). Suponiendo que son correctos, ¿cómo puedo hacer que Instant Client reconozca esta configuración y use LDAP para buscar el nombre?

Lo que he probado hasta ahora

Intenté configurar la TNS_ADMINvariable de entorno en el directorio que contiene los archivos proporcionados, y aunque esto funciona bien para que Instant Client reconozca un tnsnames.oraarchivo, no parece ser suficiente para que comience a mirar LDAP. Aquí están los resultados (con rutas, nombres de usuario y contraseñas modificadas):

(Los siguientes comandos resultan ser el símbolo del sistema de Windows, pero imagino que algo similar es factible en Linux. La sqlplusvista aquí también es la versión Instant, con los binarios de Instant Client que acompañan en el mismo directorio).

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 al margen

¿Hay etiquetas para TNS, LDAP o Instant Client (o incluso solo Oracle Client normal) que podrían agregarse a esta pregunta? No pude localizar ninguno.

jpmc26
fuente
¿Es el ejecutable correcto? "where sqlplus"
Bjarte Brandt
@BjarteBrandt Sí, es el que espero que sea cuando ejecuto where( C:\TEMP\sqlplus.exe). Para ser más específicos, sqlplusno está "instalado" en la máquina. Simplemente se encuentra en el directorio actual, con los binarios del cliente al lado. Definitivamente está recogiendo el tnsnames.oraarchivo usando la TNS_ADMINvariable de entorno, ya que está desactivado en un directorio completamente diferente.
jpmc26
@BjarteBrandt Para confirmar que está utilizando los archivos binarios correctos del cliente, seguí adelante y también corrí where oci.dll. También da el resultado esperado: C:\TEMP\oci.dll.
jpmc26
podría ser un problema de dominio. ¿También probaste con el nombre FQ? (dbname_or_whatever.domainname)
ik_zelf
2
@ ora-600 Lo siento, olvidé esta pregunta. Resultó ser un problema con los archivos de configuración, que nos proporcionó nuestro cliente. (Posiblemente el archivo de configuración de Kerberos; no puedo recordarlo). Lo curioso es que estaba trabajando en un entorno de desarrollo tratando de hacer esto, fue igualmente problemático hacer que funcione en etapas, y todavía no lo es. trabajando en productos hasta donde yo sé. (Terminamos usando un nombre TNS local para que la aplicación funcionara). Definitivamente desperdicié dinero para el proyecto; incluso si / cuando funciona en producción, el retorno de la inversión sería minúsculo en comparación con el costo.
jpmc26

Respuestas:

1

Coloque los archivos sqlnet.oray ldap.oraen su $ORACLE_ADMINdirectorio y asegúrese de establecer las variables de entorno. Hice el mío el TNS_ADMINdirectorio

(Linux) mi .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

Y pude conectarme a una base de datos que no estaba en mi tnsnames.ora

marca
fuente