ใช้ LDAP เพื่อค้นหาชื่อด้วย Oracle Instant Client


14

ส่วนหนึ่งเป็นผลมาจากปัญหาเกี่ยวกับเวอร์ชันที่ขัดแย้งกันหรือเป็นพยานเกี่ยวกับการติดตั้งไคลเอนต์ Oracle แบบเต็มทีมพัฒนาของฉัน (ซึ่งฉันเป็นสมาชิก) กำลังก้าวไปสู่การใช้Oracle Instant Clientและหลีกเลี่ยงการติดตั้งบนเครื่องพัฒนาของเรา โครงการใหม่ สิ่งนี้ได้ผลค่อนข้างดีถึงจุดที่เราปรับใช้กับการผลิตด้วยการตั้งค่านี้ เนื่องจากเราเป็นร้านค้า NET ส่วนใหญ่เราจึงใช้ไคลเอ็นต์ดั้งเดิม (พร้อมด้วย. NET wrappers) แทนที่จะเป็นจาวา

ตอนนี้ไคลเอนต์ต้องการให้เราลงทะเบียนบริการฐานข้อมูลกับเซิร์ฟเวอร์ LDAP และใช้เซิร์ฟเวอร์ LDAP เพื่อค้นหาชื่อ พวกเขาได้จัดเตรียมsqlnet.oraและldap.oraไฟล์ ( และไฟล์กำหนดค่าการเข้ารหัสประกอบ) ที่ดูเหมือนว่าถูกต้อง โดยเฉพาะอย่างยิ่งsqlnet.oraไฟล์จะระบุ LDAP เป็นแหล่งที่เป็นไปได้สำหรับการค้นหาชื่อบริการสุทธิ:

names.directory_path=(tnsnames,ldap)

ฉันมั่นใจว่าเครื่องที่ฉันทำงานด้วยสามารถใช้ LDAP เพื่อเข้าถึงบริการได้เนื่องจากฉันสามารถทำได้โดยใช้ SQL Developer (ซึ่งอนุญาตให้ฉันป้อนข้อมูล LDAP โดยตรง) สมมติว่าถูกต้องฉันจะให้ไคลเอ็นต์ทันใจจดจำการกำหนดค่านี้และใช้ LDAP เพื่อค้นหาชื่อได้อย่างไร

สิ่งที่ฉันได้ลองมาแล้ว

ฉันได้ลองตั้งค่าTNS_ADMINตัวแปรสภาพแวดล้อมไปยังไดเรกทอรีที่มีไฟล์ที่ให้มาและในขณะที่วิธีนี้ใช้งานได้ดีในการทำให้ Instant Client รับรู้tnsnames.oraไฟล์ดูเหมือนว่าจะไม่เพียงพอที่จะเริ่มมองหา LDAP ต่อไปนี้เป็นผลลัพธ์ (โดยเปลี่ยนเส้นทางชื่อผู้ใช้และรหัสผ่าน):

(คำสั่งต่อไปนี้เกิดขึ้นเป็น Windows Command Prompt แต่ฉันคิดว่าบางสิ่งที่คล้ายกันนั้นสามารถทำได้บน Linux สิ่งที่sqlplusเห็นที่นี่คือรุ่นทันทีเช่นกันพร้อมกับไบนารีไคลเอ็นต์ทันทีในไดเรกทอรีเดียวกัน)

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, หรือไคลเอนต์ทันที (หรือแม้แต่ลูกค้า Oracle ปกติ) ที่สามารถเพิ่มให้กับคำถามนี้ได้หรือไม่? ฉันไม่สามารถหาตำแหน่งใด ๆ


มันเป็นปฏิบัติการที่ถูกต้อง? "where sqlplus"
Bjarte Brandt

@BjarteBrandt ใช่มันเป็นสิ่งที่ฉันคาดหวังว่าจะเป็นเมื่อฉันเรียกใช้where( C:\TEMP\sqlplus.exe) หากต้องการเฉพาะเจาะจงมากขึ้นsqlplusไม่ได้ "ติดตั้ง" ไว้ในเครื่อง มันแค่นั่งอยู่ในไดเรกทอรีปัจจุบันโดยมีไบนารีลูกค้าอยู่ข้างๆ มันเก็บtnsnames.oraไฟล์ไว้อย่างแน่นอนโดยใช้TNS_ADMINตัวแปรสภาพแวดล้อมเนื่องจากมันถูกปิดในไดเรกทอรีที่แตกต่างอย่างสิ้นเชิง
jpmc26

@BjarteBrandt เพื่อยืนยันว่าใช้ไบนารี่ไคลเอนต์ที่ถูกต้องฉันก็ดำเนินการwhere oci.dllต่อ C:\TEMP\oci.dllนอกจากนี้ยังให้ผลที่คาดหวัง:
jpmc26

อาจเป็นปัญหาโดเมน คุณลองใช้ชื่อ FQ ด้วยหรือไม่ (dbname_or_whething.domainname)
ik_zelf

2
@ ora-600 ขออภัยฉันลืมคำถามนี้ มันกลายเป็นปัญหาเกี่ยวกับไฟล์ปรับแต่งเองซึ่งลูกค้าของเราจัดหาให้ (อาจเป็นไฟล์ Kerberos config ฉันจำไม่ได้แล้ว) สิ่งที่ตลกคือฉันทำงานในสภาพแวดล้อมแบบ dev พยายามทำสิ่งนี้มันเป็นปัญหาเท่ากันที่ทำให้การทำงานในการแสดงละครยังคงไม่ดี ทำงานในการผลิตเท่าที่ฉันรู้ (เราลงเอยด้วยการใช้ชื่อ TNS ในท้องถิ่นเพื่อให้แอปทำงานได้) เสียเงินอย่างแน่นอนสำหรับโครงการ แม้ว่า / เมื่อมันทำงานในกระทุ้งผลตอบแทนจากการลงทุนจะลดลงเมื่อเทียบกับต้นทุน
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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.