C# Oracle.ManagedDataAccess和ORA-01017:用户名/密码无效;拒绝登录
我在我们的一台服务器上遇到了一个具有挑战性的情况。我有一个ASP.NET MVC 3应用程序,需要连接到Oracle 12c数据库。它使用以下连接字符串执行此操作:C# Oracle.ManagedDataAccess和ORA-01017:用户名/密码无效;拒绝登录,c#,oracle12c,odp.net-managed,ora-01017,C#,Oracle12c,Odp.net Managed,Ora 01017,我在我们的一台服务器上遇到了一个具有挑战性的情况。我有一个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
User ID=myuserid;Password=mypass;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<IP ADDRESS>)(PORT = 1521)))(CONNECT_DATA=(SERVICE_NAME=PDB1)));
我可以使用上述凭据在桌面上成功连接。我在另一台服务器上有相同的代码,但使用的是旧的、未管理的库版本,它可以使用前面提到的凭据成功连接。但是,我希望在其上运行代码的服务器每次都会失败,使用相同的凭据可以在不同的服务器上成功连接
在发生故障的服务器上,我可以:
- 通过SQLPLUS连接
- 用TNSPING点击数据库
- 创建系统DSN以建立ODBC连接
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...
而我遇到问题的服务器没有(或者至少这是假设):
是否有人知道安全/配置设置会阻止密码传输,即使密码存在于连接字符串中
编辑(20180713):
在我的特殊情况下,问题在于FIPS设置
对于那些做研究的人来说,有几种方法可以解决这个问题
如果未启用FIPS,则最有可能需要调查您的数据库是否将SEC_CASE_SENSITIVE_LOGON设置设置设置为true。您需要执行ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON=FALSE;然后重置所有密码 我为同一个问题苦苦挣扎了几个星期,终于找到了解决办法。我必须禁用FIPS安全策略,尝试设置此密钥: [HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy] “已启用”=dword:00000000 归零,这对我来说非常有效 我一直在关注你的帖子你的空白密码问题最终指向了我: 基于杰夫的回答(2014年10月31日) GPO可以将注册表设置设置为仅允许符合FIPS的算法。如图所示,将其设置为0可能违反了某些安全策略,并被GPO覆盖。此注册表设置控制的不仅仅是IIS或ASP.NET 还有一种特定于.NET的方法,可以在应用程序级别使用。与修改整个服务器的设置相比,这更容易证明 特定于应用程序的方法: 在Web.config或App.config文件中,添加以下设置:
<configuration> <!-- Will already be there -->
<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime>
... the rest of your .config
... .config的其余部分
如果我没记错的话,这必须在配置文件的开头
所有.NET应用程序方法:
将上述设置放在machine.config文件中。每个.NET版本和体系结构都有一个(64位/32位)。已经有一个元素了,所以把元素放在里面。我没有像这个案例一样的场景,但是我有非常相似的结果。我所做的是解决这个问题,我在下面(VB.NET)中引用了密码:
cnx.ConnectionString=“用户ID=MYID;密码=”“MyPass”“;数据源=MyTEST”
或使用chr(34),如下所示
cnx.ConnectionString = "User ID=MYID;Password="+chr(34)+"MyPass"+chr(34)+" ;Data Source=MyTEST"
我有完全相同的问题。当我直接从SqlDeveloper连接到数据库时,它工作得很好。但我的应用程序(基于VB6构建)无法连接到Oracle,并出现错误“ORA-01017无效ID/密码”。
关闭数据库ID的区分大小写登录后,解决了问题。我也遇到了同样的问题!我没有尝试更改注册表项,但尝试更改web和计算机配置。这不起作用 解决问题的方法是更改我运行的应用程序池
应用程序池在一个服务帐户下运行,一旦我将其移动到一个新的应用程序池(仅使用默认系统帐户),它就开始从配置中获取用户ID和密码。使用Entity Framework和Oracle.ManagedDataAccess.Client时,我也遇到了同样的问题,但通过在配置中大写我的密码,我取得了一些成功连接字符串部分。我正在尝试使用以下命令: ALTER SYSTEM SET SEC_区分大小写_LOGON=FALSE 但它不起作用。 我必须用th改变它
<configuration> <!-- Will already be there -->
<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime>
... the rest of your .config
cnx.ConnectionString = "User ID=MYID;Password="+chr(34)+"MyPass"+chr(34)+" ;Data Source=MyTEST"
private string cadenaCone = "User Id=AAA111;Password=BBB222;Data Source=CCC333;Connection Timeout=60;";
private string cadenaCone = "User Id=AAA111;Password=" + ((char)34).ToString() + "BBB222"+((char)34).ToString()+";Data Source=CCC333;Connection Timeout=60;";