Sử dụng LDAP để tra cứu tên với Oracle Instant Client


14

Một phần là do có vấn đề với các phiên bản xung đột hoặc bitness với cài đặt đầy đủ của máy khách Oracle, nhóm phát triển của tôi (trong đó tôi là thành viên) đã chuyển sang sử dụng Oracle Instant Client và tránh cài đặt trên các máy phát triển của chúng tôi dự án mới. Điều này đã làm việc khá tốt, thậm chí đến mức chúng tôi triển khai để sản xuất với thiết lập này. Vì chúng tôi chủ yếu là một cửa hàng .NET, nên chúng tôi đang sử dụng máy khách gốc (với các trình bao bọc .NET), thay vì Java.

Bây giờ một khách hàng đang yêu cầu chúng tôi đăng ký dịch vụ cơ sở dữ liệu với máy chủ LDAP và sử dụng máy chủ LDAP để tra cứu tên. Họ đã cung cấp sqlnet.oraldap.oracác tệp (và một tệp cấu hình mã hóa đi kèm) có vẻ đúng. Cụ thể, sqlnet.oratệp chỉ định LDAP là nguồn có thể để tra cứu tên dịch vụ mạng:

names.directory_path=(tnsnames,ldap)

Tôi tự tin rằng máy tôi đang làm việc có thể sử dụng LDAP để truy cập dịch vụ vì tôi có thể làm như vậy bằng SQL Developer (cho phép tôi nhập trực tiếp thông tin LDAP). Giả sử chúng là chính xác, làm thế nào tôi có thể khiến Instant Client nhận ra cấu hình này và sử dụng LDAP cho tên tra cứu?

Những gì tôi đã cố gắng cho đến nay

Tôi đã thử đặt TNS_ADMINbiến môi trường cho thư mục chứa các tệp được cung cấp và trong khi điều này hoạt động tốt để khiến Instant Client nhận ra một tnsnames.oratệp, thì dường như không đủ để bắt đầu xem LDAP. Dưới đây là kết quả (với đường dẫn, tên người dùng và mật khẩu đã thay đổi):

(Các lệnh sau đây xảy ra là Windows Command Prompt, nhưng tôi tưởng tượng điều gì đó tương tự có thể thực hiện được trên Linux. Cái sqlplusđược thấy ở đây là phiên bản Instant, với các nhị phân Instant Client đi kèm trong cùng thư mục.)

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

Lưu ý bên

Có thẻ nào cho TNS, LDAP hoặc Máy khách tức thời (hoặc thậm chí chỉ là Máy khách Oracle bình thường) có thể được thêm vào câu hỏi này không? Tôi không thể xác định vị trí nào.


Đây có phải là thực thi chính xác? "nơi sqlplus"
Bjarte Brandt

@BjarteBrandt Vâng, đó là cái tôi mong đợi khi tôi chạy where( C:\TEMP\sqlplus.exe). Để cụ thể hơn, sqlpluskhông được "cài đặt" trên máy. Nó chỉ ngồi trong thư mục hiện tại, với các nhị phân máy khách bên cạnh nó. Nó chắc chắn chọn tnsnames.oratệp bằng TNS_ADMINbiến môi trường, vì nó bị tắt trong một thư mục hoàn toàn khác.
jpmc26

@BjarteBrandt Để xác nhận rằng nó sử dụng đúng nhị phân của máy khách, tôi cũng đã tiếp tục và chạy where oci.dll. Nó cũng cho kết quả mong đợi : C:\TEMP\oci.dll.
jpmc26

có thể là một vấn đề tên miền. Bạn cũng đã thử với tên FQ? (dbname_or_whthing.domainname)
ik_zelf

2
@ ora-600 Xin lỗi, tôi quên câu hỏi này. Hóa ra đó là vấn đề với chính các tệp cấu hình, được cung cấp cho chúng tôi bởi khách hàng của chúng tôi. . làm việc trong prod như tôi biết. (Chúng tôi đã kết thúc bằng cách sử dụng tên TNS địa phương để ứng dụng hoạt động.) Chắc chắn lãng phí tiền cho dự án; ngay cả khi / khi nó hoạt động trong prod, lợi tức đầu tư sẽ rất nhỏ so với chi phí.
jpmc26

Câu trả lời:


1

Đặt sqlnet.oraldap.oracác tệp trong $ORACLE_ADMINthư mục của bạn và đảm bảo đặt các biến môi trường. Tôi làm cho tôi TNS_ADMINthư mục

(Linux) .bashrc của tôi

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

Và tôi đã có thể kết nối với một DB không có trong tôi tnsnames.ora

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.