草庐IT

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

coder 2024-05-29 原文

我在我们的一台服务器上遇到了挑战。我有一个需要连接到 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# - Oracle.ManagedDataAccess 和 ORA-01017 : invalid username/password; logon denied的更多相关文章

  1. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  2. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  3. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  4. ruby-on-rails - 在 Rails 中自定义 "Password confirmation doesn' t 匹配密码 - 2

    有没有办法在Rails中为确认字段自定义消息?例如在设计中我必须输入密码和password_confirmation并且错误消息是:Passwordconfirmationdoesn'tmatchPassword我可以更改事件记录语言环境消息(“不匹配”),但它会在该语言环境消息的开头和结尾输出密码确认和密码,所以我得到如下内容:"PasswordconfirmationmustmatchPassword"有没有办法将其更改为不同的字符串?PasswordconfirmationandPasswordmustmatch.编辑另一件事是拥有完全自定义的消息,例如:'Setpassword

  5. ruby-on-rails - 设计通过 reset_password_token 获取用户 - 2

    我正在尝试创建密码规则来设计可恢复的密码更改。我通过passwords_controller.rb做了一个父类(superclass),但我需要在应用规则之前检查用户角色,但我所拥有的只是reset_password_token。 最佳答案 假设您的模型是用户:User.with_reset_password_token(your_token_here)Source 关于ruby-on-rails-设计通过reset_password_token获取用户,我们在StackOverflow

  6. c# - C# 中的 Flatten Ruby 方法 - 2

    我如何做Ruby方法"Flatten"RubyMethod在C#中。此方法将锯齿状数组展平为一维数组。例如:s=[1,2,3]#=>[1,2,3]t=[4,5,6,[7,8]]#=>[4,5,6,[7,8]]a=[s,t,9,10]#=>[[1,2,3],[4,5,6,[7,8]],9,10]a.flatten#=>[1,2,3,4,5,6,7,8,9,10 最佳答案 递归解决方案:IEnumerableFlatten(IEnumerablearray){foreach(variteminarray){if(itemisIEnume

  7. ruby - 可以像在 C# 中使用#region 一样在 Ruby 中使用 begin/end 吗? - 2

    我最近从C#转向了Ruby,我发现自己无法制作可折叠的标记代码区域。我只是想到做这种事情应该没问题:classExamplebegin#agroupofmethodsdefmethod1..enddefmethod2..endenddefmethod3..endend...但是这样做真的可以吗?method1和method2最终与method3是同一种东西吗?还是有一些我还没有见过的用于执行此操作的Ruby惯用语? 最佳答案 正如其他人所说,这不会改变方法定义。但是,如果要标记方法组,为什么不使用Ruby语义来标记它们呢?您可以使用

  8. c# - Ruby 等效于 C# Linq 聚合方法 - 2

    什么是Linq聚合方法的ruby​​等价物。它的工作原理是这样的varfactorial=new[]{1,2,3,4,5}.Aggregate((acc,i)=>acc*i);每次将数组序列中的值传递给lambda时,变量acc都会累积。 最佳答案 这在数学以及几乎所有编程语言中通常称为折叠。它是更普遍的变形概念的一个实例。Ruby从Smalltalk中继承了这个特性的名称,它被称为inject:into:(像aCollectioninject:aStartValueinto:aBlock一样使用。)所以,在Ruby中,它称为inj

  9. ruby-on-rails - Rails 4.1 Devise 3.3 列 users.password 不存在 - 2

    我想通过控制台手动创建一个用户:User.find_or_create_by(email:"user@mail.com",first_name:"Stan",last_name:"Smith",password:"password",password_confirmation:"password",confirmed_at:Time.now)我在过去的项目中多次这样做,但这次没有用。它没有获取Devise密码模型属性,所以这是我得到的错误:PG::UndefinedColumn:ERROR:columnusers.passworddoesnotexist我有Rails4.1.4和Dev

  10. 如何判断oracle是否启动及启动oracle数据库 - 2

    plsql连接Oracle超时,完犊子了肯定是服务器断电了。得马上检查Oracle服务器状态1、检查数据库是否启动su-oracle切换到Oracle用户,输入sqlplus/assysdba显示连接状态。如果末尾显示的状态是Connectedtoanidleinstance.证明未启动2、启动数据库startup启动数据库,末尾出现Databaseopened说明数据库启动成功3、查看数据库监听是否正常先quit;断开Oracle连接,使用lsnrctlstatus查看监听状态,如果出现TNS-开头的Nolistener、Connectionrefused等错误,说明监听未启动4、启动数据库

随机推荐