2013-02-13 108 views
6

我有一個Visual Studio C++項目(非託管C++),我試圖連接到局域網中另一臺機器上的SQL Server 2008實例我使用TCP/。IP我的連接字符串是:SQL Server 2008錯誤18456狀態58,登錄失敗的用戶「

"DRIVER={SQL Server Native Client 10.0};Server=tcp:169.254.204.232,1433;Network Library=DBMSSOCN;Initial Catalog=myDB;User ID=myDBUser;Password=myPassword;" 

重要的事實:我能夠成功地遠程連接到與用戶ID myDBUser和密碼實例使用MYPASSWORD SSMS - 使用SQL身份驗證模式(並指定TCP/IP在連接選項中)!另外,一旦登錄,我可以成功導航數據庫myDB。

所以是的,我已啓用我的服務器上的混合模式身份驗證。

另請注意,當我的實例是本地並且使用Windows身份驗證時,相同的代碼已成功連接。換句話說,自從最後一件工作完成以來,發生了什麼變化,是因爲我將服務器移到了另一臺機器上,現在正在使用SQL身份驗證,因此更改了我的連接字符串 - 代碼根本沒有任何更改。

以下是錯誤消息我在SQL Server 2008實例的服務器日誌得到:

用戶登錄失敗」原因:。嘗試使用SQL驗證失敗登錄服務器配置爲僅Windows身份驗證 錯誤:18456,嚴重性:14,狀態:58

注意的是,用戶在錯誤信息被引用爲空,即使我的連接字符串我指定一個非空的用戶ID

其他連接。我嘗試過的字符串給出了相同的結果:

"DRIVER={SQL Server Native Client 10.0};Server=MACHINE2;Database=myDB;User ID=myDBUser;Password=myPassword;" (where MACHINE2 is the windows name of the machine hosting the sql server instance.) 

我沒有在上述連接字符串中指定實例名稱,因爲我的實例是作爲默認實例安裝的,而不是命名實例。

關於如何解決這個問題的任何想法?

更新:我似乎解決了這個問題。你準備好了解這個錯誤信息是多麼愚蠢和完全無關嗎? 在連接字符串中,我只是將「用戶ID」更改爲「uid」和「密碼」更改爲「pwd」,現在它可以工作。 我現在在我的SQL Server日誌中看到「連接成功」...

+1

您說您已啓用混合模式身份驗證,但異常消息明確指出,否則。自更改認證模式後是否重新啓動?看到這篇文章:http://stackoverflow.com/questions/8441158/an-attempt-to-login-using-sql-authentication-failed – Jacco 2013-02-13 21:50:29

回答

2

答案:在連接字符串中,我只是將「用戶ID」更改爲「uid」和「密碼」更改爲「pwd」,現在它可以正常工作。現在我看到在我的SQL Server日誌「連接成功」 ...

8

嘗試運行SELECT SERVERPROPERTY('IsIntegratedSecurityOnly');如果它返回1是Windows身份驗證如果爲0混合。如果它返回1肯定是Windows身份驗證,並且一定有其他錯誤。

+0

它返回0.如果我理解正確這意味着我的服務器處於混合身份驗證模式爲我希望/需要它? – 2013-02-13 22:24:40

+0

好,SQL Server絕對是混合身份驗證...是密碼短嗎?您可以取消選中數據庫屬性中的強制密碼策略,儘管您表示可以遠程連接,並且如果該策略已啓用且密碼較短,則不應該能夠遠程連接。 – 2013-02-13 22:36:06

+0

另一個選擇是不要在你的連接中指定端口: 169.254.204.232而不是169.254.204.232,1433 – 2013-02-13 22:36:47

5

我覺得我做這個解決了這個問題...

右擊服務器名稱在對象資源管理器 - >屬性 - >安全 - >將服務器身份驗證更改爲SQL Server和Windows身份驗證模式 - >單擊確定。

之後,在對象資源管理器上打開服務器 - >展開安全性 - >展開登錄 - >右鍵單擊您的登錄 - >屬性 - >輸入新密碼 - >確認密碼 - >確定。

然後斷開你的SQL並重新啓動你的系統。然後在SQL身份驗證模式下使用更改的密碼登錄SQL Server 2008。

謝謝:)

相關問題