如何使用 LDAP 为 ORACLE 设置 C# 连接字符串以指定数据库?
How can I setup a C# connection string for ORACLE using LDAP to specify the database?
我有一个 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 连接相匹配。
在同一个 server/workstation 上与 SQLPLUS 连接工作正常:
sqlplus MY_SCHEMA/mypassword@MYLDAPENTRY
我希望给出错误,它默认搜索 TNSNames.ora 而不是咨询 LDAP.ora 和查询指定的 LDAP 服务器
在处理 LDAP 服务器时是否有不同的方式来指定它?或者我必须在 OPT.NET?
中配置的东西
这给了我一个线索...
我正在使用 ODP.Net 托管驱动程序。它不会读取 TNS_ADMIN 环境变量或等效的注册表项。所以你有两个选择来解决这个问题:
[1] 您可以在其中一个 .config 文件中指定 TNS_ADMIN 值(例如,app.config、web.config 和 machine.config)
<oracle.manageddataaccess.client>
<version number="*">
<settings>
<setting name="TNS_ADMIN" value="C:\oracle\work"/>
</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>
在我的例子中,这在 servers/workstations 之间或随着服务器更换时间的推移而改变的可能性很小。
我有一个 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 连接相匹配。
在同一个 server/workstation 上与 SQLPLUS 连接工作正常:
sqlplus MY_SCHEMA/mypassword@MYLDAPENTRY
我希望给出错误,它默认搜索 TNSNames.ora 而不是咨询 LDAP.ora 和查询指定的 LDAP 服务器
在处理 LDAP 服务器时是否有不同的方式来指定它?或者我必须在 OPT.NET?
中配置的东西这给了我一个线索...
我正在使用 ODP.Net 托管驱动程序。它不会读取 TNS_ADMIN 环境变量或等效的注册表项。所以你有两个选择来解决这个问题:
[1] 您可以在其中一个 .config 文件中指定 TNS_ADMIN 值(例如,app.config、web.config 和 machine.config)
<oracle.manageddataaccess.client>
<version number="*">
<settings>
<setting name="TNS_ADMIN" value="C:\oracle\work"/>
</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>
在我的例子中,这在 servers/workstations 之间或随着服务器更换时间的推移而改变的可能性很小。