Gunakan LDAP untuk mencari nama dengan Oracle Instant Client

14

Sebagian sebagai akibat dari memiliki masalah dengan versi yang bertentangan atau bitness dengan instalasi penuh klien Oracle, tim pengembangan saya (yang saya anggotanya) telah bergerak ke arah menggunakan Oracle Instant Client dan menghindari instalasi pada mesin pengembangan kami untuk sebagian besar proyek baru. Ini telah bekerja dengan cukup baik, bahkan pada titik yang kami gunakan untuk produksi dengan pengaturan ini. Karena kami sebagian besar toko .NET, kami menggunakan klien asli (dengan .NET wrappers), bukan yang Java.

Sekarang klien mengharuskan kami mendaftarkan layanan database dengan server LDAP dan menggunakan server LDAP untuk mencari nama. Mereka telah menyediakan sqlnet.oradan ldap.orafile (dan file konfigurasi enkripsi yang menyertainya) yang tampaknya benar. Secara khusus, sqlnet.orafile menentukan LDAP sebagai sumber yang mungkin untuk mencari nama layanan net:

names.directory_path=(tnsnames,ldap)

Saya yakin bahwa mesin tempat saya bekerja dapat menggunakan LDAP untuk mengakses layanan karena saya dapat melakukannya menggunakan SQL Developer (yang memungkinkan saya untuk memasukkan informasi LDAP secara langsung). Dengan asumsi mereka benar, bagaimana saya bisa mendapatkan Klien Instan untuk mengenali konfigurasi ini dan menggunakan LDAP untuk mencari nama?

Apa yang saya coba sejauh ini

Saya telah mencoba mengatur TNS_ADMINvariabel lingkungan ke direktori yang berisi file yang disediakan, dan sementara ini berfungsi dengan baik untuk membuat Klien Instan mengenali tnsnames.orafile, tampaknya tidak cukup untuk membuatnya mulai melihat LDAP. Inilah hasilnya (dengan jalur, nama pengguna, dan kata sandi diubah):

(Perintah berikut ini adalah Windows Command Prompt, tapi saya membayangkan sesuatu yang serupa bisa dilakukan di Linux. Yang sqlplusterlihat di sini adalah versi Instan juga, dengan menyertai binari Klien Instan dalam direktori yang sama.)

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

Catatan samping

Apakah ada tag untuk TNS, LDAP, atau Klien Instan (atau bahkan hanya Klien Oracle normal) yang dapat ditambahkan ke pertanyaan ini? Saya tidak dapat menemukannya.

jpmc26
sumber
Apakah ini executable yang benar? "where sqlplus"
Bjarte Brandt
@BjarteBrandt Ya, itu yang saya harapkan ketika saya jalankan where( C:\TEMP\sqlplus.exe). Untuk lebih spesifik, sqlplustidak "diinstal" pada mesin. Itu hanya duduk di direktori saat ini, dengan binari klien di sebelahnya. Jelas mengambil tnsnames.orafile menggunakan TNS_ADMINvariabel lingkungan, karena itu tidak aktif di direktori yang sama sekali berbeda.
jpmc26
@BjarteBrandt Untuk mengonfirmasi menggunakan binari klien yang tepat, saya terus maju dan berlari where oci.dlljuga. Hal ini juga memberikan hasil yang diharapkan: C:\TEMP\oci.dll.
jpmc26
bisa menjadi masalah domain. Apakah Anda juga mencoba dengan nama FQ? (dbname_or_wh whatever.domainname)
ik_zelf
2
@ ora-600 Maaf, saya lupa tentang pertanyaan ini. Ternyata ada masalah dengan file konfigurasi itu sendiri, yang diberikan kepada kami oleh klien kami. (Mungkin file konfigurasi Kerberos; saya tidak dapat mengingat dengan mudah.) Yang lucu adalah saya bekerja di lingkungan pengembang yang mencoba melakukan ini, sama-sama bermasalah untuk membuatnya bekerja dalam pementasan, dan masih belum bekerja di prod sejauh yang saya tahu. (Kami akhirnya menggunakan nama TNS lokal untuk membuat aplikasi berfungsi.) Jelas menghabiskan uang untuk proyek; bahkan jika / ketika itu bekerja di prod, laba atas investasi akan sangat kecil dibandingkan dengan biaya.
jpmc26

Jawaban:

1

Tempatkan sqlnet.oradan ldap.orafile dalam $ORACLE_ADMINdirektori Anda dan pastikan untuk mengatur variabel lingkungan. Saya membuat saya menjadi TNS_ADMINdirektori

(Linux) .bashrc saya

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

Dan saya bisa terhubung ke DB tidak di saya tnsnames.ora

Menandai
sumber