2011-12-09 37 views
1

我有一個簡單的WCF項目,它使用實體框架訪問AdventureWorks數據庫。它實際上出了一本書Windows Communication Foundation 4: Step by Step.部署到IIS時,WCF /實體框架與外部SQL Server數據庫不起作用

問題在於SQL Server數據庫不是本地SQL Server Express實例,而是名爲win01s305的外部計算機上的完整SQL Server 2008 R2實例。我通過Generate from Database從外部數據庫創建了一個數據模型。在我將WCF服務發佈到IIS之前,數據訪問完全與內置的ASP.NET Web服務器(Cassini?)一起工作。然後,憑據/帳戶在遠程SQL服務器計算機上不同並且數據訪問停止工作。

書指定的腳本,如果你有麻煩:

USE [AdventureWorks] 
GO 
CREATE USER [IIS APPPOOL\DefaultAppPool] FOR LOGIN [IIS APPPOOL\DefaultAppPool] 
GO 
EXEC sp_addrolemember N'db_owner', [IIS APPPOOL\DefaultAppPool] 
GO 
GO 
CREATE USER [IIS APPPOOL\ASP.NET v4.0] FOR LOGIN [IIS APPPOOL\ASP.NET v4.0] 
GO 
EXEC sp_addrolemember N'db_owner', [IIS APPPOOL\ASP.NET v4.0] 
GO 

問題是這些帳戶沒有遠程SQL Server計算機上存在。機器上沒有IIS或.NET Framework,只有SQL Server。我怎樣才能做到這一點?

回答

2

您必須在域帳戶下運行您的應用程序池併爲您的數據庫授予該用戶權限,或者在sql server上啓用混合模式身份驗證時,創建一個SQL身份驗證用戶並將其名稱和密碼放入您的連接字符串。

USE [master] 
GO 
CREATE LOGIN [MYDOMAIN\MyAccount] FROM WINDOWS WITH DEFAULT_DATABASE=[master] 
GO 
USE [MyDatabase] 
GO 
CREATE USER [MyDomain\MyAccount] FOR LOGIN [MyDomain\MyAccount] 
GO 
USE [MyDatabase] 
GO 
EXEC sp_addrolemember N'db_datareader', N'MyDomain\MyAccount' 
GO 
USE [MyDatabase] 
GO 
EXEC sp_addrolemember N'db_datawriter', N'MyDomain\MyAccount' 
GO 
+0

您是否有一個腳本示例以授予SQL Server中的域用戶權限? –

+0

您可以在SQL Management Studio GUI中輕鬆完成。如果您選擇,您也可以從那裏生成腳本。我也爲你編輯了我的答案。 – JamieSee

1

通常我會爲您的應用程序池或該應用程序的SQL登錄名使用域帳戶。這一切都取決於你如何在活動目錄中(和離開)構建你的服務器。我的偏好是後者,FWIW。

相關問題