c# - C# Oracle.ManagedDataAccess 和 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)));



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


ORA-01017: invalid username/password; logon denied



我可以在桌面上使用上述凭据成功连接,但我的代码连接服务器每次都失败,但使用相同的凭据在不同服务器上可以成功连接。

在失败的服务器上,我可以:

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

我已经检查了所有位置的TNSNAMES.ORA,它们似乎是正确的。


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 ................



时间:

几个星期以来,我一直在尝试解决这个问题,最终得到了一个解决方案,我必须禁用FIPS安全策略,尝试设置此密钥:

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsaFipsAlgorithmPolicy] " Enabled"=dword:00000000

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

GPO可以将注册表设置设置为仅允许FIPS兼容算法。

还有另一种特定于.NET的方法,可以在应用程序级别工作,与修改整个服务器的设置相比,这要容易得多。

特定于应用程序的方法:

在Web.config或App.config文件中,添加以下设置:


<configuration> <!-- Will already be there -->


 <runtime>


 <enforceFIPSPolicy enabled="false"/>


 </runtime>


... the rest of your .config



所有.NET应用程序方法:

将设置置于machine.config文件中,每个.NET版本和架构(64 bit/32位)都有一个,已经有一个元素,因此将元素放在其中。

尝试使用以下连接字符串之一:

Data Source=username/password@//myserver:1521/my.service.com;

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID))); User Id=myUsername;Password=myPassword;

在这里你可以得到更多的信息。

我为了解决问题所做的事情是,我把密码包含在引号中,如下面的(VB.NET):

cnx.ConnectionString ="User ID=MYID;Password=""MyPass"" ;Data Source=MyTEST"

或按以下的方式使用chr(34)


cnx.ConnectionString ="User ID=MYID;Password="+chr(34)+"MyPass"+chr(34)+" ;Data Source=MyTEST"



我有同样的问题。 当我直接从SqlDeveloper连接到数据库时,它工作得很好。 but ( 基于VB6构建) 无法连接到 Oracle,并给出错误"ora-01017无效的标识/密码"。
关闭后,对我的数据库ID进行区分大小写的登录,它解决了问题。

我也有同样的问题 ! 我没有尝试改变 RegKey,但是我尝试改变网络和机器配置。 这不起作用。

解决这个问题的是改变我在下面运行的应用程序池 !

应用程序池在服务帐户下运行,一旦我将它移动到一个新的应用程序池中。

...