c# - Oracle.ManagedDataAccess 和 ORA-01017 : invalid username/password; logon denied

标签 c# oracle12c odp.net-managed ora-01017

我在我们的一台服务器上遇到了挑战。我有一个需要连接到 Oracle 12c 数据库的 ASP.NET MVC 3 应用程序。它使用以下连接字符串执行此操作:

User ID=myuserid;Password=mypass;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<IP ADDRESS>)(PORT = 1521)))(CONNECT_DATA=(SERVICE_NAME=PDB1)));

我还在使用 Oracle 的 Oracle.ManagedDataAccess,版本 4.121.1.0。每次尝试连接都会导致以下错误:

ORA-01017: invalid username/password; logon denied

我可以使用上述凭据在我的桌面上成功连接。我在另一台服务器上有相同的代码,但使用的是旧的、非托管版本的库,它可以使用上述凭据成功连接。但是,我希望我的代码在其上运行的服务器每次都失败,使用相同的凭据在不同的服务器上启用成功连接。

在出现故障的服务器上,我可以:

  • 通过 SQLPLUS 连接
  • 使用 TNSPING 访问数据库
  • 创建系统 DSN 以建立 ODBC 连接

我已经检查了所有位置的 TNSNAMES.ORA,它们看起来都是正确的。

访问数据库次数过多后,该帐户实际上已锁定,这表明我确实访问了数据库并且数据库不喜欢所提供的凭据。我检查了以前连接成功的应用程序,它们也失败了,并显示帐户被锁定的错误。解锁帐户导致这些应用程序成功连接,但我遇到问题的服务器除外。

我已经无计可施了。

对于可能导致此问题的原因,是否有人有任何其他建议?

编辑:

我在本地计算机和有问题的服务器上安装了 WireShark。我捕获了我的桌面和数据库以及有问题的服务器和数据库之间的通信。我发现我的桌面传达了密码:

0080  35 42 31 41 43 34 30 00 01 01 01 0d 0d 41 55 54   5B1AC40......AUT
0090  48 5f 50 41 53 53 57 4f 52 44 01 40 40 43 30 36   H_PASSWORD.@@C06
00a0  37 39 42 31 31 42 46 36 42 41 43 44 39 30 38 44   79B11BF6BACD908D
00b0  37 39 34 34 31 31 46 34 32 33 30 42 34 36 44 36   794411F4230B46D6
00c0  35 36 36 33 31 42 45 39 39 41 36 43 36 37 42 44   56631BE99A6C67BD
00d0  43 33 35 42 42 44 36 44 42 45 37 34 36 00 01 0d   C35BBD6DBE746...

而我遇到问题的服务器却没有(或者至少这是假设):

0080  39 33 39 37 32 33 46 00 01 01 01 0d 0d 41 55 54   939723F......AUT
0090  48 5f 50 41 53 53 57 4f 52 44 01 40 40 00 00 00   H_PASSWORD.@@...
00a0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00b0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00c0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00d0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 0d   ................

有谁知道即使密码存在于连接字符串中也会阻止密码传输的安全/配置设置?

编辑 (20180713):

在我的特殊情况下,问题是 FIPS 设置。

对于那些做研究的人来说,有几种方法可以解决这个问题。

  1. 您可以更改位于 HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled 的注册表设置。如果启用 FIPS,则值为 1。如果禁用,则值为 0。您无需重新启动。

  2. 您遇到此问题的原因很可能是启用了 FIPS 并且您使用的是 Oracle 托管数据访问库。一个可靠的解决方法是使用非托管库。但是,要使用该库,您需要安装 Oracle Instant Client。客户端可在 Oracle Data Access Components 下载。 .

  3. 将您的服务器升级到 Oracle 12.2c。 12.2c之前的oracle 12c版本还有这个问题。

如果您没有启用 FIPS,您很可能需要调查您的数据库是否将 SEC_CASE_SENSITIVE_LOGON 设置设置为 true。您将需要执行 ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;然后重置所有密码。

最佳答案

几个星期以来,我一直在为同一个问题苦苦挣扎,终于找到了解决方案。我不得不禁用 FIPS 安全策略,尝试设置这个 key :

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy] "已启用"=dword:00000000

归零,对我来说效果很好

我一直在关注您的主题,您的空白密码问题最终将我指向了这里:

https://community.oracle.com/thread/2557592?start=30&tstart=0

关于c# - Oracle.ManagedDataAccess 和 ORA-01017 : invalid username/password; logon denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26410951/

相关文章:

c# - 快速转换字节数组到音频数据的短数组

c# - 单元测试 EF DbUpdateConcurrencyException 处理

sql - 如何选择函数定义作为查询?

c# - 使用 Oracle.ManagedDataAccess 异常连接到 Oracle

c# - Xamarin Forms Maps - 在 iOS 上显示当前位置

c# - 如何将 sbyte 值存储在字节变量中?

oracle - (ORA-12154) 无法从 VS 2017 中迁移的 SSIS 项目连接到 tnsnames.ora 中的数据源

oracle - 如何强制 flyway 清理我的 docker oracle 数据库?

oracle - EF + ODP.NET : The specified value is not an instance of type 'Edm.Decimal'