Используйте LDAP для поиска имени с Oracle Instant Client

14

Частично из-за проблем с конфликтующими версиями или разрядностью при полной установке клиента Oracle моя команда разработчиков (членом которой я являюсь) перешла на использование Oracle Instant Client и в большинстве случаев избегала установки на наших машинах разработки. новые проекты. Это сработало довольно хорошо, даже до такой степени, что мы развернули в производство с этой настройкой. Поскольку мы в основном магазин .NET, мы используем собственный клиент (с оболочками .NET), а не Java.

Теперь клиент требует, чтобы мы зарегистрировали службу базы данных на сервере LDAP и использовали сервер LDAP для поиска имен. Они предоставили sqlnet.oraи ldap.oraфайлы (и сопровождающий файл конфигурации шифрования), которые кажутся правильными. В частности, sqlnet.oraфайл определяет LDAP как возможный источник для поиска имен сетевых сервисов:

names.directory_path=(tnsnames,ldap)

Я уверен, что машина, с которой я работаю, может использовать LDAP для доступа к службе, поскольку я смог сделать это с помощью SQL Developer (что позволило мне напрямую вводить информацию LDAP). Предполагая, что они верны, как я могу заставить Instant Client распознавать эту конфигурацию и использовать LDAP для поиска имени?

Что я пробовал до сих пор

Я попытался установить TNS_ADMINпеременную окружения в каталог, который содержит предоставленные файлы, и хотя это прекрасно работает для того, чтобы Instant Client распознал tnsnames.oraфайл, этого, похоже, недостаточно, чтобы он начал смотреть на LDAP. Вот результаты (с измененными путями, именами пользователей и паролями):

(Следующие команды являются командной строкой Windows, но я думаю, что нечто подобное выполнимо в Linux. Здесь также sqlplusпоказана версия Instant, с сопровождающими двоичными файлами Instant Client в том же каталоге.)

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

Примечание

Есть ли в этом вопросе теги для TNS, LDAP или Instant Client (или даже просто для обычного клиента Oracle)? Я не мог найти ни одного.

jpmc26
источник
Это правильный исполняемый файл? "где sqlplus"
Бьярте Брандт
@BjarteBrandt Да, я ожидаю, что это будет именно то, что я запустил where( C:\TEMP\sqlplus.exe). Чтобы быть более конкретным, sqlplusне «установлен» на машине. Он просто сидит в текущем каталоге, рядом с ним находятся двоичные файлы клиента. Он определенно забирает tnsnames.oraфайл, используя TNS_ADMINпеременную окружения, поскольку он находится в совершенно другом каталоге.
jpmc26
@BjarteBrandt Чтобы подтвердить, что он использует правильные двоичные файлы клиента, я тоже пошел вперед и побежал where oci.dll. Это также дает ожидаемый результат: C:\TEMP\oci.dll.
jpmc26
может быть проблема домена. Вы также пытались с именем FQ? (dbname_or_whwhat.domainname)
ik_zelf
2
@ ora-600 Извините, я забыл об этом вопросе. Оказалось, проблемы с самими файлами конфигурации, которые были предоставлены нам нашим клиентом. (Возможно, файл конфигурации Kerberos; я не могу вспомнить это от руки.) Забавно, что я работал в среде разработчиков, пытаясь сделать это, было одинаково проблематично заставить его работать в стадии подготовки, и это все еще не работает в прод, насколько я знаю. (В итоге мы использовали местное имя TNS, чтобы приложение работало.) Определенно потраченные впустую деньги на проект; даже если / когда он работает в Prod, возврат инвестиций будет минимальным по сравнению с затратами.
jpmc26

Ответы:

1

Поместите sqlnet.oraи ldap.oraфайлы в $ORACLE_ADMINкаталоге и убедитесь , чтобы установить переменные окружения. Я сделал мой TNS_ADMINкаталог

(Linux) мой .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

И я смог подключиться к БД не по моему tnsnames.ora

отметка
источник