Użyj LDAP do wyszukiwania nazw w Oracle Instant Client

14

Częściowo z powodu problemów z konfliktowymi wersjami lub bitów przy pełnej instalacji klienta Oracle, mój zespół programistów (do którego należę) posuwa się w kierunku korzystania z Oracle Instant Client i w większości przypadków unika instalacji na naszych komputerach programistycznych nowe projekty. Działa to całkiem dobrze, nawet do tego stopnia, że ​​wdrażamy do produkcji przy użyciu tej konfiguracji. Ponieważ jesteśmy głównie sklepem .NET, używamy klienta natywnego (z opakowaniami .NET), a nie klienta Java.

Teraz klient wymaga, abyśmy zarejestrowali usługę bazy danych na serwerze LDAP i używali serwera LDAP do wyszukiwania nazw. Dostarczyły sqlnet.orai ldap.orapliki (oraz towarzyszący plik konfiguracyjny szyfrowania), które wydają się prawidłowe. W szczególności sqlnet.oraplik określa LDAP jako możliwe źródło wyszukiwania nazw usług sieciowych:

names.directory_path=(tnsnames,ldap)

Jestem pewien, że komputer, z którym pracuję, może korzystać z LDAP w celu uzyskania dostępu do usługi, ponieważ mogłem to zrobić za pomocą SQL Developer (co pozwoliło mi na bezpośrednie wprowadzenie informacji LDAP). Zakładając, że są poprawne, w jaki sposób mogę sprawić, aby Instant Client rozpoznał tę konfigurację i używał LDAP do wyszukiwania nazw?

Co próbowałem do tej pory

Próbowałem ustawić TNS_ADMINzmienną środowiskową na katalog, który zawiera dostarczone pliki, i chociaż działa to dobrze, aby Instant Client rozpoznał tnsnames.oraplik, wydaje się, że nie wystarczy, aby zaczął patrzeć na LDAP. Oto wyniki (ze zmienionymi ścieżkami, nazwami użytkowników i hasłami):

(Następujące polecenia są czasami wierszem poleceń systemu Windows, ale wyobrażam sobie, że coś podobnego można wykonać w systemie Linux. sqlplusWidać tutaj również wersję Instant, z towarzyszącymi plikami binarnymi Instant Client w tym samym katalogu).

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

Dygresja

Czy istnieją tagi dla TNS, LDAP lub Instant Client (lub nawet zwykłego klienta Oracle), które można dodać do tego pytania? Nie mogłem znaleźć żadnego.

jpmc26
źródło
Czy jest to poprawny plik wykonywalny? „where sqlplus”
Bjarte Brandt
@BjarteBrandt Tak, spodziewam się, że będzie po uruchomieniu where( C:\TEMP\sqlplus.exe). Mówiąc ściślej, sqlplusnie jest „instalowany” na komputerze. Po prostu siedzi w bieżącym katalogu, obok plików binarnych klienta. Zdecydowanie pobiera tnsnames.oraplik przy użyciu TNS_ADMINzmiennej środowiskowej, ponieważ jest on wyłączony w zupełnie innym katalogu.
jpmc26
@BjarteBrandt Aby potwierdzić, że używa właściwych plików binarnych klienta, poszedłem dalej i też pobiegłem where oci.dll. To również daje oczekiwany wynik: C:\TEMP\oci.dll.
jpmc26,
może to być problem z domeną. Czy próbowałeś również z nazwą FQ? (dbname_or_whokolwiek.domainname)
ik_zelf
2
@ ora-600 Przepraszamy, zapomniałem o tym pytaniu. Okazało się, że występują problemy z samymi plikami konfiguracyjnymi, które zostały nam dostarczone przez naszego klienta. (Być może plik konfiguracyjny Kerberos; nie mogę sobie przypomnieć od ręki.) Zabawne jest to, że pracowałem w środowisku deweloperskim, próbując to zrobić, równie problematyczne było uruchomienie go w środowisku inscenizacji i nadal nie jest o ile wiem, pracuje w prod. (Skończyło się na użyciu lokalnej nazwy TNS, aby aplikacja działała.) Zdecydowanie zmarnowane pieniądze na projekt; nawet jeśli / kiedy to działa w prod, zwrot z inwestycji byłby niewielki w porównaniu do kosztu.
jpmc26

Odpowiedzi:

1

Umieść pliki sqlnet.orai ldap.oraw swoim $ORACLE_ADMINkatalogu i upewnij się, że ustawiłeś zmienne środowiskowe. Zrobiłem mój TNS_ADMINkatalog

(Linux) mój .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

I byłem w stanie połączyć się z DB, którego nie ma w moim tnsnames.ora

znak
źródło