我正在尝试使用以下代码访问Oracle数据库(版本10.2.0.4.0),但是当调用open方法时,连接会引发“ORA-01005:给出空密码;登录被拒绝”异常。
var connBuilder = new OracleConnectionStringBuilder();
connBuilder.DataSource = "(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = MyHost.Address)(PORT = ####)) )(CONNECT_DATA =(SERVICE_NAME = MyService)))";
connBuilder.UserID = "validUserId";
connBuilder.Password = "validPassword";
connBuilder.PersistSecurityInfo = true;
var connString = connBuilder.ToString();
using (var con = new OracleConnection(connString))
{
con.Open();
}
如果我更改用户名,则会收到以下内容; “ORA-01017:用户名/密码无效;登录被拒绝”,如果我更改与con.OpenWithNewPassword("validPassword");
如果我尝试使用已弃用的Oracle客户端,它连接没有问题:
using (var depCon = new System.Data.OracleClient.OracleConnection
("Data Source=MyHost.Address:####/MyService;Persist Security Info=True;
User ID=validUsername;Password=validPassword;Unicode=True"))
{
depCon.Open();
}
我(显然)喜欢使用最新的Odp.Net驱动程序,但似乎无法解决这个问题。有没有人有任何想法?
答案 0 :(得分:2)
请查看此主题以了解有关FIPS合规性的问题:
https://community.oracle.com/thread/2557592?start=0&tstart=0
此外: Oracle.ManagedDataAccess and ORA-01017: invalid username/password; logon denied
答案 1 :(得分:1)
当你这样做时它是否有效:
var connBuilder = new Common.DbConnectionStringBuilder();
connBuilder.Add("Data Source", "(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = MyHost.Address)(PORT = ####)) )(CONNECT_DATA =(SERVICE_NAME = MyService)))";
connBuilder.Add("User Id", "validUserId");
connBuilder.Add("Password", "validPassword");
您使用的是哪个版本的ODP.NET?使用“旧”ODP.NET提供程序连接到具有区分大小写密码的“新”Oracle数据库时存在已知问题,请参阅此处:https://community.oracle.com/message/2198228
为了验证在您的数据库上运行此命令:
ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;
答案 2 :(得分:1)
区分大小写和ODP.Net驱动程序以及不同的数据库版本的问题应该是一个简单的修复。将您的连接字符串密码用引号(“)括起来,例如Password=\"password\";
,这应保留密码大小写