【问题标题】:ODP.NET Managed driver with Ldap authentication带有 Ldap 身份验证的 ODP.NET 托管驱动程序
【发布时间】:2018-07-11 18:13:57
【问题描述】:

我意识到这个问题可能有点含糊,但我有点被这个问题困扰。

我想使用托管 ODP.NET 驱动程序(来自 NuGet 的 12.2.1100 版)连接到 oracle db 11.2.0.3.0 版本 - 我正在从本机驱动程序迁移旧版应用程序。

连接代码很简单:

var connectionString = "Data Source=MY_TNS_ALIAS;User ID=first.last;Password=mypassword";
using (OracleConnection cn = new OracleConnection(connectionString))
{ 
    cn.Open();
}

但我收到一个异常: Oracle.ManagedDataAccess.Client.OracleException Message=ORA-01017: invalid username/password; logon denied

我添加了TNS_ADMIN 环境变量并使用Procmon 检查tnsnames.orasqlnet.ora 正在被读取。

旧的本机驱动程序在相同的代码(和不同的导入)下工作得很好。此外,该代码适用于非 Ldap 用户(在dba_users 中输入的用户)

我尝试使用OracleConnectionStringBuilder,但没有成功。

我还检查了如果我只在 NAMES.DIRECTORY_PATH 中使用 LDAP,则将在 LDAP 中查询 TNS 别名并读取 ldap.ora - 但这不是我的目标。

我的问题

  1. 本机驱动程序是否支持 LDAP 身份验证?
  2. 本机驱动程序和托管驱动程序之间是否存在必须考虑的差异?任何额外的变量?转义用户名中的点号?
  3. 可以使用哪些附加工具来调试此问题(我使用过TraceLevelTraceOptionTraceFileLocation

任何帮助将不胜感激。

【问题讨论】:

  • Mabey 试试OracleConnectionStringBuilder 课程。即connectionString.Password = "...";connectionString.UserID = "...";
  • 也许你混合了两个不同的项目。一种是 Oracle 名称服务器(使用通用 LDAP 协议)的 TNS 别名解析。另一种是通过网络和 LDAP 目录进行用户身份验证。 TNS 别名解析似乎有效,因为您从数据库中收到一条错误消息。因此TraceLevelTraceOption 没有帮助。出于安全原因,很难追踪任何用户凭据。
  • 我用OracleConnectionStringBuilder 方法更新了这个问题。我意识到 LDAP 身份验证和 LDAP Tns 别名解析是两件不同的事情,我只对前者感兴趣。我看到我的密码是OraclePoolManager.InitializeSEPSCredentials(),但在这之后代码很快就会变得混乱。
  • 你设置SQLNET.AUTHENTICATION_REQUIRED = 1了吗?
  • 添加了这个选项,没有成功

标签: c# .net oracle odp.net


【解决方案1】:

查看Configuring Oracle Data Provider for .NET

仅支持 NTS 身份验证。没有 RADIUS 和 Kerberos5 身份验证。

所以,这取决于您使用的方法:Authentication by the Network

  • 使用 SSL 进行身份验证

  • 使用第三方服务进行身份验证

    • Kerberos 身份验证

    • 基于 PKI 的身份验证

    • 使用 RADIUS 进行身份验证

    • 基于目录的服务

【讨论】:

    猜你喜欢
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多