基本問題:爲什麼我的Web應用程序不使用AppPoolIdentity在同一臺機器上登錄到SQL Server?
我有一個Web應用程序訪問同一臺機器上的SQL Server數據庫。該Web應用程序在其自己的應用程序池下運行 - 我們稱之爲MyAppPool
。如果在IIS管理器我轉到高級設置,我可以看到,在ApplicationPoolIdentity
MyAppPool
運行。當我發出請求的Web應用程序,我可以打開任務管理器,並驗證的w3wp.exe
用戶名是MyAppPool
。在SQL Server中,我添加了一個Windows用戶IIS AppPool\MyAppPool
,並賦予它從數據庫讀取的必要權限。問題是,當登錄嘗試登錄到SQL Server時,登錄失敗的原因是DOMAIN\MACHINE$
。它超越了我。爲什麼該應用程序未登錄爲IIS AppPool\MyAppPool
?
詳情:
我知道這個問題的變種已被要求在其他地方,但我真的沒有卡住的解決方案。我嘗試在web.config
上添加<identity impersonate="true" />
。如果我這樣做,我的登錄失敗NT AUTHORITY\IUSR
。我試圖從託管它的機器訪問網絡應用程序,並獲得相同的登錄錯誤。我正在IIS8,在Windows Server 2012和SQL Server 2012
我能找到最近的問題是Why is my MVC app trying to log into my DB as my machine, and not as the App Pool identity?,以及所提供的解決方案不起作用。我無法改變集成安全性是錯誤的(我過去曾經運行過這個東西)。引用https://stackoverflow.com/a/15145488/147530:
ApplicationPoolIdentity使用IIS應用程序池\ ApplicationPool本地 訪問,但對於遠程訪問域\計算機名$
聽起來很合理。問題是,爲什麼ApplicationPoolIdentity
不使用IIS AppPool\MyAppPool
身份時,DB是同一臺計算機上?
引述另一SO後,IIS application using application pool identity loses primary token?:
這個應用程序還連接到使用 集成安全性=在連接字符串中真正的SQL Server數據庫。如果數據庫是 地方,然後我們看到,IIS APPPOOL \ OurAppPoolName用於 連接到數據庫;如果數據庫是遠程的,那麼計算機帳戶 OURDOMAIN \ ourwebserver $使用。
這是我想要的行爲,但沒有得到它,這就是我在這個問題中要求的 - 我不想授予DOMAIN\MACHINE-NAME$
登錄到SQL Server的權限。引用https://stackoverflow.com/a/15445280/147530:
我認爲這是一個壞主意,但是,因爲它授權運行的網絡服務來訪問數據庫的任何程序 - 不只是你的web應用程序 。
我試了一件事,這是啓用IIS8上的Windows身份驗證使用此鏈接http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2#ModulesinIIS85但這也沒有解決問題。
1)哪個IIS? 2)在「MyAppPool」中,您是否將應用程序池設置爲以特定身份運行?默認情況下,它在LocalSystem下運行。看到這個SO回答:http://stackoverflow.com/questions/7698286/login-failed-for-user-iis-apppool-asp-net-v4-0/8853386#8853386 – tgolisch