如何使用LDAP为ORACLE设置C#连接字符串来指定数据库



我有一个到Oracle数据库的连接字符串,如下所示:

Data Source=myserver:1521/myservice;User ID=MY_SCHEMA;Password=mypassword

我知道这基本上是一种没有TNS的方式来指定我们正在连接的数据库。它是有效的,但通常我们引用LDAP中指定的数据库。特别有用的是,如果数据库被移动到一个新的位置,我们只需要更新LDAP条目。我试过这样:

Data Source=MYLDAPENTRY;User ID=MY_SCHEMA;Password=mypassword

然而,当我尝试以这种方式连接时,我会得到

ORA-12154: TNS:could not resolve the connect identifier specified

MYLDAPENTRY的TNSPING给了我

Used LDAP adapter to resolve the alias
Attempting to contact (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myserver)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=myservice)))
OK (140 msec)

这与我能够开始工作的无TNS连接相匹配。

在同一台服务器/工作站上连接SQLPLUS效果良好:

sqlplus MY_SCHEMA/mypassword@MYLDAPENTRY 

我预计,如果出现错误,它将默认搜索TNSNames.ora,而不是咨询LDAP.ora并查询指示的LDAP服务器

在处理LDAP服务器时,是否有不同的方法来指定它;或者我必须在OPT.NET中配置的东西?

这给了我一个线索。。。https://stackoverflow.com/a/41571809/685

我正在使用ODP.Net托管驱动程序。它不会读取TNS_ADMIN环境变量,也不会读取等效的注册表项。所以你有两个选择来解决这个问题:

[1] 您可以在一个.config文件(e、g、app.config、web.config和machine.config(中指定TNS_ADMIN值

<oracle.manageddataaccess.client>
<version number="*">
<settings>
<setting name="TNS_ADMIN" value="C:oraclework"/>
</settings>
</version>
</oracle.manageddataaccess.client>

您的里程数可能会因服务器或工作站上安装Oracle客户端的位置而异(我知道路径可能会因我商店中安装的版本而异(

[2] 您可以直接指定LDAP服务器的位置。

<oracle.manageddataaccess.client>
<version number="*">
<LDAPsettings>
<LDAPsetting name="DIRECTORY_TYPE" value="AD" />
<LDAPsetting name="DEFAULT_ADMIN_CONTEXT" value="DC=ad,DC=myDomain,DC=myTLD"/>
<LDAPsetting name="DIRECTORY_SERVERS" value="(ad.myDomain.myTLD:PORTNUMBER)"/>
<LDAPsetting name="DIRECTORY_SERVER_TYPE" value="AD"/>
</LDAPsettings>
<settings>
<setting name="NAMES.DIRECTORY_PATH" value="(LDAP)"/>
<setting name="NAMES.DEFAULT_DOMAIN" value="ad.myDomain.myTLD"/>
</settings>
</version>
</oracle.manageddataaccess.client>

在我的情况下,这在服务器/工作站之间或随着时间的推移,随着服务器的更换,变化的可能性要小得多。

最新更新