Utiliser LDAP pour la recherche de nom avec Oracle Instant Client

14

En partie en raison de problèmes avec des versions conflictuelles ou de la difficulté d'installation complète du client Oracle, mon équipe de développement (dont je suis membre) s'oriente vers l'utilisation d' Oracle Instant Client et évite l'installation sur nos machines de développement pour la plupart de nouveaux projets. Cela a plutôt bien fonctionné, même au point que nous déployons en production avec cette configuration. Étant donné que nous sommes principalement une boutique .NET, nous utilisons le client natif (avec des wrappers .NET), plutôt que Java.

Désormais, un client exige que nous enregistrions le service de base de données auprès d'un serveur LDAP et que nous utilisions le serveur LDAP pour la recherche de nom. Ils ont fourni sqlnet.oraet ldap.orafichiers (et un fichier de configuration de chiffrement) qui l' accompagne semblent corrects. En particulier, le sqlnet.orafichier spécifie LDAP comme source possible pour rechercher les noms de service réseau:

names.directory_path=(tnsnames,ldap)

Je suis convaincu que la machine avec laquelle je travaille peut utiliser LDAP pour accéder au service car j'ai pu le faire en utilisant SQL Developer (ce qui m'a permis de saisir directement les informations LDAP). En supposant qu'ils sont corrects, comment puis-je obtenir Instant Client pour reconnaître cette configuration et utiliser LDAP pour la recherche de nom?

Ce que j'ai essayé jusqu'à présent

J'ai essayé de définir la TNS_ADMINvariable d'environnement dans le répertoire qui contient les fichiers fournis, et bien que cela fonctionne bien pour que Instant Client reconnaisse un tnsnames.orafichier, cela ne semble pas être suffisant pour le faire commencer à regarder LDAP. Voici les résultats (avec les chemins, noms d'utilisateur et mots de passe modifiés):

(Les commandes suivantes se trouvent être l'invite de commande Windows, mais j'imagine que quelque chose de similaire est faisable sur Linux. La version sqlplusici est également la version instantanée, avec les binaires Instant Client dans le même répertoire.)

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

Note complémentaire

Y a-t-il des balises pour TNS, LDAP ou Instant Client (ou même juste un client Oracle normal) qui pourraient être ajoutées à cette question? Je n'ai pu en trouver aucun.

jpmc26
la source
Est-ce le bon exécutable? "où sqlplus"
Bjarte Brandt
@BjarteBrandt Oui, c'est celui que je m'attends à ce que ce soit lorsque je lance where( C:\TEMP\sqlplus.exe). Pour être plus précis, sqlplusn'est pas "installé" sur la machine. Il se trouve juste dans le répertoire actuel, avec les binaires clients à côté. Il reprend définitivement le tnsnames.orafichier en utilisant la TNS_ADMINvariable d'environnement, car cela est désactivé dans un répertoire complètement différent.
jpmc26
@BjarteBrandt Pour confirmer qu'il utilise les bons fichiers binaires client, je suis allé de l'avant et j'ai également couru where oci.dll. Il donne également le résultat escompté: C:\TEMP\oci.dll.
jpmc26
pourrait être un problème de domaine. Avez-vous également essayé avec le nom FQ? (dbname_or_wwhat.domainname)
ik_zelf
2
@ ora-600 Désolé, j'ai oublié cette question. Il s'est avéré qu'il y avait des problèmes avec les fichiers de configuration eux-mêmes, qui nous ont été fournis par notre client. (Peut-être le fichier de configuration Kerberos; je ne me souviens pas d'off-hand.) travaillant dans prod autant que je sache. (Nous avons fini par utiliser un nom TNS local pour faire fonctionner l'application.) Certainement gaspillé de l'argent pour le projet; même si / quand cela fonctionne en prod, le retour sur investissement serait minuscule par rapport au coût.
jpmc26

Réponses:

1

Placez les fichiers sqlnet.oraet ldap.oradans votre $ORACLE_ADMINrépertoire et assurez-vous de définir les variables d'environnement. J'ai fait le mien l' TNS_ADMINannuaire

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

Et j'ai pu me connecter à une base de données pas dans mon tnsnames.ora

marque
la source