Asp.net-Mvc
為什麼我的 MVC 應用程序試圖作為我的機器登錄我的數據庫,而不是作為應用程序池身份?
當我嘗試訪問我新部署的(到 lcoal IIS 7.5)MVC4 應用程序時,我收到錯誤消息:
使用者 ‘DOMAIN\MACHINE-NAME$’ 登錄失敗
其中“$”是附加的,而不是機器名稱的一部分。
web.config 中的連接字元串如下所示:
<add name="ComairRIEntities" connectionString="metadata=res://*/Data.ComairRI.csdl|res://*/Data.ComairRI.ssdl|res://*/Data.ComairRI.msl;provider=System.Data.SqlClient;provider connection string="data source=(local);initial catalog=MyDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
這是正在發生的事情:
在您的連接字元串中,您有以下設置:integrated security=True 這意味著 SQL Server 連接將使用啟動連接的程序的憑據進行身份驗證。由於您在 IIS 下執行並且 IIS 使用應用程序池,因此連接將通過執行應用程序池的 Windows 使用者進行身份驗證。預設情況下,這是一個幾乎沒有權限的使用者,稱為 NetworkService。NetworkService(或者在 IIS7.5 中可能是不同的)永遠不會擁有對您的數據庫的訪問權限。您的特定場景的細微差別可能會有所不同,因為 IIS 中有一堆不同的安全繼承,並且您的程序可能最終會出現一堆不同的使用者,但是,基本問題是您有Integrated security=True並且執行 IIS 程序的使用者是幾乎沒有權限的標準使用者。
要解決此問題,您有幾個選擇:
- 將 Integrated security=True 更改為 username\password 身份驗證。這將 100% 解決,但您可能不想將密碼明文儲存在 web.config 文件中。
- 在您的 IIS 虛擬目錄設置中,將匿名使用者配置為對您的數據庫具有訪問權限的有意義的使用者。這最終會有所幫助,但您必須使用不同的設置才能正確設置。
如果您需要關於 #2 的更多幫助,您必須提供以下資訊:
- AppPool 的身份
- 虛擬目錄的身份和虛擬目錄的所有身份驗證設置。