2012-06-24 64 views
6

我已經構建了一個ASP.NET MVC 2網站,我使用IIS 7.0與Rackspace Cloud Server一起託管。如何設置SQL Server/IIS 7.0以允許ASP.NET MVC網站訪問數據庫?

當我嘗試在服務器上使用IIS 7.0在localhost下測試網站時,我收到一個錯誤頁面。這來自於SQL日誌(我使用SQL網絡版):

Error: 18456, Severity: 14, State: 11 
Login failed for user 'IIS APPPOOL\DefaultAppPool'. Reason: Token-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: <local machine>] 

我的網站作品在我的家用電腦精做的問題是事做與數據庫的連接。

已經研究了錯誤消息代碼,它表明我有一個有效的數據庫登錄但服務器訪問失敗。我做了解決此閱讀各種論壇和這裏棧是什麼,我都試過了,沒有一個已經解決了這個問題(包括計算器/ serverfault。):

  1. 使用SQL Server身份驗證設置新的登錄。我在SQL中創建了一個新的登錄名並賦予我的數據庫正確的訪問權限。我在web配置中使用了以下連接字符串:

    Data Source = myServer; Initial Catalog = myDB; User Id = myUsername; Password = myPassword;

  2. 創建新登錄爲IIS APPPOOL\DefaultAppPool。我使用正確的訪問權限在SQL中創建了新的登錄並使用了Windows身份驗證。連接字符串如下:

    Server = myServer; Database = myDataBase; Trusted_Connection = True;

  3. 使用現有網絡登錄NT AUTHORITY\NETWORK SERVICE。我用正確的訪問權限將這個用戶映射到我的數據庫。連接字符串如下:

    Server = myServer; Database = myDataBase; Trusted_Connection = True;

這些問題是我在網上閱讀材料時的主要選項。最後,這裏的一些其他的東西,可能會有所幫助:

  • 設置SQL來以管理員身份運行沒有解決不了的問題
  • 關閉UAC沒有幫助
  • 我的應用程序池使用ApplicationPoolIdentity(最好出於安全原因)

總之,我的網站不會啓動,因爲它無法從數據庫中獲取對象,因此引發錯誤。問題在於對服務器的訪問權限設置不正確。我無法弄清楚我需要什麼配置的SQL登錄/連接字符串/域訪問權限。

這讓我煩了3個星期 - 請問您可以騰出5分鐘來幫助我嗎?

+0

你能發佈你當前的連接字符串嗎?我假設你正在連接集成安全性,因此AppPoolIdentity用於連接到SQL Server。此外,請提及您的Web和SQL Server是否在Active Directory安裝中運行。 –

+0

使用:'Source = SetsOfSix;初始目錄= SetsOfSix;集成安全= SSPI;'。讓我去檢查活動目錄設置的問題... –

+0

在IIS上沒有安裝「Active Directory域服務」。如何檢查Web和sql服務器是否在Active Directoty安裝中運行? –

回答

8

由於您的服務器(Web和SQL)不是域的一部分,因此無法使用Windows身份驗證(集成安全性)連接到SQL Server。

在IIS中,當連接字符串中有Integrated Security=SSPI時,用於連接到SQL Server的實際用戶是應用程序池標識。

您應該使用您的選項1,意思是使用SQL Server身份驗證設置新的登錄名。

因此,步驟是:

  1. 創建myUsername SQL Server用戶。
  2. 在用戶的屬性對話框中,轉至Securables部分並確保已選中Public
  3. 接下來,轉到User mapping部分(在左側)。在列表中查找您的數據庫並檢查它。在下面的Database role membership列表中,請確保您檢查public,db_datareaderdb_datawriter
  4. 現在給你的用戶執行存儲過程的權利。由於sa在Management Studio中執行:

    GRANT EXECUTE T​​O myUserName;

  5. 你完成了。

至於安全性,您可以稍後再修正的myUserName的權利,不能夠,例如刪除表或其他對象。

在您的應用程序,你應該在你點1

如果您有任何其他的問題,現在在連接字符串中使用,那麼請張貼的錯誤消息。

+0

謝謝。我缺少的是(a)設置'GRANT EXECUTE'和(b)在我的LINQ-to-SQL中,我有一個不正確的連接字符串引用。解決這兩個問題。你的幫助讓我看到了正確的地方。 –

相關問題