2011-02-15 64 views
2

我們有一個WCF服務,用於連接到同一臺機器上的數據庫。之後,我們將數據庫和服務都移到了不同​​的機器上(兩臺虛擬機都在同一個物理機箱上,可以互相看到)。如何通過WCF連接到另一臺虛擬機上的數據庫?

我已經在數據庫機器(WCFServiceLogin)上設置了一個標準的Windows登錄名,在數據庫中添加了指向該Windows登錄名的數據庫登錄名,向指向該數據庫登錄名的數據庫添加了一個SQL用戶,在Visual Studio項目設置連接字符串:

Data Source=NewServer;Initial Catalog=MyDB;Integrated Security=True; 
UserID=WCFServiceLogin;Password=password 

當我試圖讓觸及數據庫中的電話,我得到這個錯誤:

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

我怎樣才能讓我的WCF操作成功從新機器上的數據庫讀取,唱正確的登錄?

更新

我想我已經得到了一個有點遠。我在服務所在的機器上創建了一個WCFServiceLogin登錄,其密碼與NewServer上對應的密碼相同。然後,我將WCF服務設置爲以此登錄名運行,並將SQL登錄名更改爲使用Windows身份驗證,並從連接字符串中刪除了用戶名和密碼。最後,我運行exec sp_grantlogin'NewServer \ WCFServiceLogin'。

我現在收到此錯誤,但:

Cannot open database "MyDB" requested by the login. The login failed. Login failed for user 'NewServer\WCFServiceLogin'.

所以它看起來像它的嘗試,它只是不這樣做與正確的用戶登錄。

+0

WCF服務是從IIS內部運行的嗎? – Russell 2011-02-15 20:31:54

+0

AD中是否提供WCFServiceLogin?如果沒有,WCF機器可能難以使用此登錄。 – Russell 2011-02-15 20:37:08

回答

1

錯誤表明服務未使用WCFServiceLogin憑證。

如果WCF服務在IIS下運行,請確保應用程序池具有設置爲WCFServiceLogin的標識。否則,請確保運行WCF服務的應用程序/服務在WCFServiceLogin憑證下運行。

另外,在代碼中你可以淹沒用戶,但是這會妨礙可維護性。

此外:如果WCFServiceLogin是Windows帳戶,連接字符串中的用戶名/密碼將不起作用,您必須保持集成安全性。

編輯:

爲了澄清,集成認證是使用一個窗口(Active Directory域或機器)帳戶登錄。連接字符串使用integrated = true,就像你在你的問題中一樣。在這種情況下,您不應該有用戶名和密碼字段。該連接將使用該進程正在運行的憑據。

對於您的問題,此解決方案的問題是服務(進程)無法作爲WCFServiceLogin運行,因爲它特定於數據庫服務器計算機。如果用戶帳戶在活動目錄中,這隻能真正起作用。

一個可能的解決方案是創建一個SQL身份驗證帳戶 - 該帳戶是在SQL中創建的帳戶,並且不映射到Windows用戶名。在連接字符串中指定用戶名和密碼,並刪除集成安全性= true。

如果您沒有活動目錄,則SQL身份驗證將起作用。

我希望這可以澄清差異,以及爲什麼集成安全性不適用於機器用戶帳戶。

UPDATE:

該錯誤消息指示DB仍無法使用NEWSERVER \ WCFServiceLogin帳戶來驗證,因爲它是在另一臺機器上。

相關問題