3

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

我的情况:我正在开发一个内置于 Windows Forms 中的胖客户端应用程序(它是一个旧版应用程序,最近以低预算复活,而且生产的跑道真的很短)。

  • Oracle 12.2c 数据库,我没有 DBA 权限。我们的安全要求不允许我们的 DBA 将其更改SEC_CASE_SENSITIVE_LOGONFALSE(意味着它已设置为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\FipsAlgorithmPolicyEnabled0,
  • 我尝试在连接字符串中将用户名和密码用引号括起来,但它仍然失败。
  • 如果我使用 ODP.NET 非托管驱动程序,具有完全相同的连接字符串(并且所有其他部分相同),我可以成功连接到 Oracle 12c,但托管驱动程序会导致ORA-01017 - invalid username/password
  • 正如其他帖子中提到的,如果我尝试太多次,我的帐户将被锁定,因此它确实会命中数据库,但会被拒绝。

我尝试过(或被拒绝尝试)的最相关问题/答案: Oracle.ManagedDataAccess 和 ORA-01017:用户名/密码无效;登录被拒绝

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

编辑以解决以下评论:

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

我有两个配置完全相同的项目,唯一的区别是Oracle.DataAccess.Clientvs Oracle.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();
  }
}

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

在 OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, CriteriaCtx criteriaCtx, String affinityInstanceName, Boolean bForceMatch) at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, CriteriaCtx criteriaCtx, String affinityInstanceName, Boolean bForceMatch)在 OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureStringsecurePassword, SecureStringsecureProxyPassword, CriteriaCtx criteriaCtx) 在 Oracle.ManagedDataAccess.Client.OracleConnection.Open() 在 UserQuery.Main() 在 System。 System.Threading.ExecutionContext 处的 Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)。Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()

这是在 LINQPad 中转储时的异常。 在此处输入图像描述

4

0 回答 0