通过 Oracle Instant Client 使用 LDAP 进行名称查找

jpm*_*c26 14 oracle

部分原因是在完全安装 Oracle 客户端时遇到版本冲突或位数问题,我的开发团队(我是其中的成员)一直在转向使用Oracle Instant Client并避免在我们的开发机器上安装大多数新项目。这已经很有效了,甚至到了我们使用此设置部署到生产的程度。由于我们主要是一家 .NET 商店,因此我们使用本机客户端(带有 .NET 包装器),而不是 Java 客户端。

现在客户端要求我们向 LDAP 服务器注册数据库服务并使用 LDAP 服务器进行名称查找。他们提供sqlnet.oraldap.ora显示文件(以及伴随的加密的配置文件)是正确的。特别是,该sqlnet.ora文件确实将 LDAP 指定为查找网络服务名称的可能来源:

names.directory_path=(tnsnames,ldap)
Run Code Online (Sandbox Code Playgroud)

我相信我正在使用的机器可以使用 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
Run Code Online (Sandbox Code Playgroud)

边注

是否有可以添加到此问题的 TNS、LDAP 或即时客户端(甚至只是普通的 Oracle 客户端)的标签?我找不到任何。

小智 2

sqlnet.oraldap.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
Run Code Online (Sandbox Code Playgroud)

我能够连接到不在我的数据库中的数据库tnsnames.ora