2015-12-17 56 views
0

我有一個數據庫,我可以使用普通的ADO.NET使用包含SQL Server登錄名的用戶名和密碼的連接字符串進行訪問。這是在IIS中運行的WCF服務中完成的。託管SQL Server實例的計算機與使用Web服務的計算機不同。使用Microsoft SMO庫使用SQL登錄憑據連接到SQL Server數據庫時出錯

connectionString="Data Source=DB_MACHINE\SQLEXPRESS;Initial Catalog=MY_TEST_DB;Connection Timeout=120;User Id=my_web_user;Password=my_pass" 

我正在寫一些方法現在使用SMO,看看錶和觸發器存在。

我得到以下錯誤,這是奇怪的,因爲我不知道爲什麼它很重要,如果計算機名稱具有權限?我使用設置的SQL Server登錄用戶名/密碼登錄,那麼爲什麼錯誤會指出機器名稱。 statemetns正在執行的網絡服務器,我相信是在NETWORK SERVICE下運行,但不應該只是使用SQL Server登錄的權限?而且,我該如何糾正這個問題? SQL Server登錄可以在不使用SMO時訪問數據庫。

Error generating report: System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: An exception occurred while executing a Transact-SQL statement or batch. (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is: 
Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. ----> System.Data.SqlClient.SqlException: The server principal "MY_DOMAIN\WEB_SERVICE_COMPUTER$" is not able to access the database "MY_TEST_DB" under the current security context. 
    at Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException) 
    at Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException) 
    at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType) 
    --- End of inner ExceptionDetail stack trace --- 
    at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes exe...). 

回答

0

嗯,正如你提到你使用SMO,那麼您可以嘗試:

new ServerConnection("servername", "username", "password").ExecuteNonQuery(...) 

這是很好的知道,在默認情況下WCF服務是在應用程序池動態用戶運行。在基於網絡的操作(例如,連接到數據庫)下將「轉換」爲網絡服務,然後網絡服務被視爲機器用戶帳戶,例如mydomain\mypc$

如果您無法以連接字符串中指定的用戶身份進行連接,則始終可以將mydomain \ mypc $ user添加爲數據庫用戶並設置適當的權限。

請記住,SQL Server可能不接受域名的正確名稱,例如,可能不接受mydomain.local.com\mypc$,請嘗試mydomain\mypc$