2015-08-03 101 views
2

我想訪問一個Oracle數據庫(版本10.2.0.4.0)使用下面的代碼,但提供了「ORA-01005:給出的空密碼;登錄被拒絕」異常調用打開方法時的連接。ORA-01005錯誤連接ODP.Net

 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驅動程序,但似乎無法通過這個問題。有沒有人有任何想法?

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的:

+0

什麼是完整版本的Oracle數據庫?我相信只有終端10.2版本才支持。字符串生成器,只是用用戶名和密碼硬編碼連接字符串?如果刪除Persist Security Info = True; Unicode = True,會發生什麼情況? –

+0

數據庫版本是「Oracle數據庫10g企業版版本10.2.0.4.0」 。刪除Persist Security和Unicode沒有任何變化,也沒有對連接字符串進行硬編碼。 我現在在想,需要在服務器上安裝某些東西來啓用ODP.net訪問,但無法找到任何文檔來支持此操作在此期間,我正在使用遺產(不建議使用)的驅動程序,它連接成功。 – KevD

+0

你實際上是否提供密碼?或者你是否在嘗試使用類似操作系統身份驗證的地方,並將其留空? –

回答

2
+0

下一次,展開您的答案,而不是鏈接到其他人的答案。最初,我繞過了它,因爲我不想經過一堆鏈接。如果你做了研究,分享你學到的知識,以便其他人可以得到與你所做的相同的答案,而不必翻遍一切。另外,鏈接可以移動/變成破碎/死/禁用。出於這個原因,SO規則不提供「僅鏈接」答案。 – vapcguy

+0

答案可以簡單概括爲:嘗試將'HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ FipsAlgorithmPolicy \ Enabled'從'1'更改爲'0'。這個答案實際上也適用於我的情況 - 只是希望我已經看到了如何更快地做到這一點,所以我沒有最終發佈我自己的問題,以達到它 - http://dba.stackexchange.com/questions/142085/ORA-01017-無效 - 用戶名 - passwordlogon被拒絕。但是,它還有一些其他故障排除步驟可以用來確認一個人的設置,首先,在跳入註冊表之前確認是一個好主意。 – vapcguy

1

請問當你做這樣的工作?還有,當你連接到一個「新」甲骨文區分大小寫的密碼中使用「舊」 ODP.NET提供數據庫中的已知問題,在這裏看到:https://community.oracle.com/message/2198228

爲了驗證運行數據庫上運行此命令:

ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE; 
+0

我正在運行Oracle 10g它不具有區分大小寫的密碼,所以這不是問題。我正在使用Oracle的Oracle.ManagedDataAccess Nuget包 - 版本12.1.022 – KevD

+0

另外 - 使用DbConnectionStringBuilder產生的結果恐怕是相同的。還沒有快樂。 – KevD

+0

@Wernfried Dornscheit您遺漏了測試還涉及到需要重置密碼。在這之前,如果帳戶是使用SEC_CASE_SENSITIVE_LOGON = TRUE標誌下的密碼創建的,則仍然區分大小寫。 – vapcguy

1

區分大小寫以及ODP.Net驅動程序和不同數據庫版本的問題應該是一個簡單的修復。將連接字符串密碼用引號(「)括起來,如Password=\"password\";,這應該保持密碼大小寫

+0

有些東西要嘗試,所以+1,但對於所有情況都遠遠沒有明確的解決方法。它不適用於我,但如果他們遇到大小寫敏感的問題,而不是FIPS問題/ Oracle錯誤,則可能與其他人一起使用。 – vapcguy

+0

此外,如果你這樣做,你有效地強制執行區分大小寫。當我在連接字符串中使用'User Id'參數來完成此操作時,我的用戶以'user'的身份進入/傳入並且他真的是我數據庫中的USER' - 他不能再登錄。我不得不將其更改爲以USER身份傳遞名稱,然後運行。只是要注意的事情。 – vapcguy