Oracle 托管数据访问 - ORA-01017

问题描述

我已经通过各种不同的 SO 帖子和问题试图在这里找到答案,但到目前为止我没有运气,所以我会询问是否有人有任何更新的帮助。

我的情况: 我正在开发一个内置在 Windows 窗体中的胖客户端应用程序(这是一个遗留应用程序,最近以较低的预算和非常短的生产跑道复活)。

  • Oracle 12.2c 数据库,我没有 DBA 权限。我们的安全要求不允许我们的 DBA 将 SEC_CASE_SENSITIVE_logoN 更改为 FALSE(意味着它被设置为 TRUE 并且必须保持这种状态)。
  • ODP.NET 托管数据访问 DLL 版本 19.11.0,但我也尝试使用 12.2.1100
  • .NET Framework 4.6.2,但我也尝试将 ODP.Net Core 与 .NET Core 3 一起使用,但遇到了同样的问题
  • Computer\HKEY_LOCAL_MACHINE\SYstem\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy注册表设置 Enabled 设为 0,
  • 我尝试将用户名和密码用引号括在连接字符串中,但仍然失败。
  • 如果我使用 ODP.NET 非托管驱动程序,连接字符串完全相同(并且所有其他部分都相同),我可以成功连接到 Oracle 12c,但托管驱动程序导致 ORA-01017 - invalid username/password
  • 如其他帖子所述,如果我尝试太多次,我的帐户将被锁定,因此它确实命中了数据库,但被拒绝了。

我尝试过(或被拒绝尝试)的最相关问题/答案: Oracle.ManagedDataAccess and ORA-01017: invalid username/password; logon denied

我已经尝试了所有可以尝试的方法,但仍然无法使其正常工作。我真的不想将 Oracle 客户端作为我的应用程序的依赖项(出于安全原因,它添加了不切实际的文档和验证量在此处插入眼珠>) .

编辑以解决以下评论

出于安全原因,我不得不严格编辑连接字符串,但它是 EZ Connect 格式。我不打算使用任何 oracle 客户端,但我的笔记本电脑上确实安装了 Oracle 客户端(不是即时客户端),并设置了 ORACLE_HOME。我已经按照 Oracle 的 ODP.NET 文档的说明安装了 Oracle.ManagedDataAccess nuget 包。此代码片段在 LINQPad 中运行(因此调用 .Dump())。它在调用 .open() 时抛出异常。

我有两个配置完全相同的项目,唯一的区别是 Oracle.DataAccess.ClientOracle.ManagedDataAccess.Client,第一个可以工作。

用于连接的代码如下所示:

using Oracle.ManagedDataAccess.Client;
void Main()
{
 var cs = "USER ID=<userid removed>;DATA SOURCE=<hostname>:1571/<servicename>;PASSWORD=\"<password removed>\"";
  using (var conn = new OracleConnection(cs))
  {
    conn.open();
    conn.GetSchema().Dump();
  }
}

抛出的异常是 OracleException,消息是 ORA-01017: invalid username/password; logon denied。堆栈跟踪如下所示:

在 OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd,Boolean bGetForApp,CriteriaCtx criteriaCtx,String affinityInstanceName,Boolean bForceMatch) 在 OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword,Boolean bForceMatch) 在 OracleInternal.ConnectionPool.OracleConnectiondispenser`3.Get(ConnectionString cs,PM conPM,ConnectionString pmCS,securestring securePassword,securestringsecureProxyPassword,CriteriaCtx criteriaCtx) 在 Oracle.ManagedDataAccess.Client.OracleConnection.open() 在 UserQuery.Main() 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,Object state) 在 System.Threading.ThreadHelper.ThreadStart()

这是在 LINQPad 中转储时的例外情况。

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)