如何使用LDAP为ORACLE设置C#连接字符串以指定数据库?
我有一个到Oracle数据库的连接字符串,如下所示:如何使用LDAP为ORACLE设置C#连接字符串以指定数据库?,c#,.net,oracle,ldap,C#,.net,Oracle,Ldap,我有一个到Oracle数据库的连接字符串,如下所示: Data Source=myserver:1521/myservice;User ID=MY_SCHEMA;Password=mypassword Data Source=MYLDAPENTRY;User ID=MY_SCHEMA;Password=mypassword 我知道这基本上是一种没有TNS的方式来指定我们正在连接的数据库。 它可以工作,但通常我们引用LDAP中指定的数据库。如果数据库被移动到一个新的位置,我们只需要更新LDAP
Data Source=myserver:1521/myservice;User ID=MY_SCHEMA;Password=mypassword
Data Source=MYLDAPENTRY;User ID=MY_SCHEMA;Password=mypassword
我知道这基本上是一种没有TNS的方式来指定我们正在连接的数据库。
它可以工作,但通常我们引用LDAP中指定的数据库。如果数据库被移动到一个新的位置,我们只需要更新LDAP条目就特别有用了。我试过这样做:
Data Source=myserver:1521/myservice;User ID=MY_SCHEMA;Password=mypassword
Data Source=MYLDAPENTRY;User ID=MY_SCHEMA;Password=mypassword
然而,当我尝试以这种方式连接时,我得到了一个
ORA-12154: TNS:could not resolve the connect identifier specified
我喝了一大口酒,就又回来了
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-less连接相匹配
在同一服务器/工作站上连接SQLPLUS可以正常工作:
sqlplus MY_SCHEMA/mypassword@MYLDAPENTRY
如果出现错误,我希望它默认搜索TNSNames.ora,而不是查询LDAP.ora并查询指定的LDAP服务器
在处理LDAP服务器时是否有不同的方法来指定它;或者我必须在OPT.NET中配置什么?这给了我一个线索
我使用的是ODP.Net托管驱动程序。它不会读取TNS_ADMIN环境变量或等效的注册表项。因此,您有两个选项来解决此问题:
[1] 您可以在一个.config文件(例如app.config、web.config和machine.config)中指定TNS_ADMIN值
您的里程数可能因服务器或工作站上安装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>
在我的情况下,在服务器/工作站之间或随着时间的推移,随着服务器的更换,这种情况发生变化的可能性要小得多。请看这里-您可以使用sqlplus连接到数据库吗?sqlplus我的_模式/mypassword@MYLDAPENTRY@老程序员-事实上,在我来到StackOverflow之前,我就从那里开始了(这不是我第一次参加竞技表演)。@scottyu我完全可以通过sqlplus那样连接。你是否检查listener.log并检查c#尝试连接到listener的内容?