Oracle.ManagedDataAccess 和 ORA-01017:用户名/密码无效;登录被拒绝

2024-04-14

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

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,它们似乎是正确的。

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

我不知道该怎么做。

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

EDIT:

我在本地计算机和有问题的服务器上安装了 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 数据访问组件 http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html.

  3. 将您的服务器升级到 Oracle 12.2c。 12.2c之前的Oracle 12c版本仍然存在这个问题。

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


我已经为同样的问题苦苦挣扎了几周,终于找到了解决方案。我必须禁用 FIPS 安全策略,尝试设置此键:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy] “启用”=dword:00000000

到零,它对我来说非常有效

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle.ManagedDataAccess 和 ORA-01017:用户名/密码无效;登录被拒绝 的相关文章

随机推荐