【问题标题】:How can I setup a C# connection string for ORACLE using LDAP to specify the database?如何使用 LDAP 为 ORACLE 设置 C# 连接字符串来指定数据库?
【发布时间】:2020-11-21 05:15:40
【问题描述】:

我有一个到 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 中配置的东西?

【问题讨论】:

  • 也许看这里 - connectionstrings.com
  • 可以用sqlplus连接数据库吗? sqlplus MY_SCHEMA/mypassword@MYLDAPENTRY
  • @OldProgrammer - 事实上,在我来到 StackOverflow 之前我确实从那里开始(不是我第一次参加 Rodeo)。
  • @scottyu 我绝对可以通过这种方式通过 sqlplus 连接。
  • 你检查 listener.log 并检查 c# 尝试连接到 listener 的内容吗?

标签: c# .net oracle ldap


【解决方案1】:

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

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

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

<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>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2019-12-11
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多