1

我有一個ASP.NET應用程序使用在IIS 7.5上運行的實體框架,它需要訪問(首先創建)數據庫,但我總是得到一個異常Login failed for user 'IIS APPPOOL\DefaultAppPool'爲IIS授予數據庫訪問APPPOOL DefaultAppPool

我已經嘗試在SQL Server Management Studio中爲該用戶創建一個登錄,因爲許多帖子推薦,但它根本沒有幫助...我已將IIS APPPOOL \ DefaultAppPool登錄與Windows身份驗證添加到服務器安全性>登錄部分,但我仍然在加載網站時看到異常。

我也嘗試創建一個不同的應用程序池,將我的應用程序移動到它並將其名稱添加到數據庫服務器的登錄部分,但它也沒有幫助。

當然,如果我將DefaultAppPool的標識設置爲LocalSystemNetworkService,它會成功創建並訪問數據庫,但我不希望將這些標識用於我的應用程序池,因爲它們具有高級權限,服務器在安全風險...

請指教我的東西。我想知道如何給我的應用程序池權限訪問數據庫...

回答

0

我不知道究竟是什麼造成了我的問題,但我自己找到了解決方案。

不知何故IIS APPPOOL\DefaultAppPool甚至不需要數據庫服務器的任何額外權限,即使其名稱未包含在數據庫的Logins部分中,也可以連接到該數據庫服務器。簡單地說,它創建的數據庫與IIS APPPOOL\DefaultAppPool實體(無論它實際是什麼)緊密耦合,並且,如果刪除屬於IIS APPPOOL\DefaultAppPool或任何其他池的數據庫,然後嘗試使用相同的應用程序池創建新數據庫,它的行爲就好像數據庫以前沒有被真正刪除過,但是就好像你試圖通過一個沒有創建它的帳戶訪問剩餘的數據一樣。也許理解我的意思並不容易,但我認爲刪除屬於應用程序池實例的數據庫不僅會將其刪除,還會將其從該池中「解除鏈接」,並且當您嘗試在同一個應用程序池中創建一個新的數據庫,但它不允許你,因爲即使它不再存在,你仍然「與之斷開」。也許數據庫服務器中仍然存在一些「鏈接」,但它們不再有效,因此應用程序池被視爲嘗試覆蓋數據庫的其餘部分,但無權執行該操作。

SO最後的修正!

要解決這個問題,只需創建一個與先前創建數據庫的名稱不同的新應用程序池,然後將應用程序移到該應用程序池中,並且它將工作。我不確定是否可以使用相同的名稱創建應用程序池,然後創建數據庫,但我想是的。當然,在創建新池之後,重新啓動IIS(通過Internet Information Services (IIS) Manager重新啓動它)。

UPDATE !!!

是的,我剛剛測試,現在可以證實,你可以創建一個同名的應用程序池,但你必須不僅從IIS管理器中的應用程序池的窗口,但也從Users目錄中刪除此之前,你的計算機(存儲用戶文件的地方,例如C:\ Users),然後你可以創建一個同名的新池。

我花了很長時間才發現這種奇怪的行爲。我通過很多錯誤和嘗試做到了這一點,所以我很樂意分享它,以便某天有人能夠比我更快地解決類似的問題。

祝你好運!

相關問題