IIS Connect To SQL Server With Windows Auth Solutions Comparision

2021-07-17

教學 IIS 如何在網域的情境下使用 AD User 作為連線遠端 SQL Server 資料庫。同時對於三種解決方案 AppPoolIdentity、ASP.NET Impersonation 以及 "Connect AS Specific User" 進行比較。藉由本次的內容,可以更深入的掌握如何設定 IIS,達到特定的應用程式與資料庫連結組態 😲

logo

說明

Connect As Specific User

可以參考 IIS Connect SQL Server With Windows Authentication 的教學內容,從應用程式的建立、資料庫的管理設定到最後的網站伺服器設定說明。

在尚未啟用 ASP.NET Impersonation 之前,Server Configuration 中的 User Name 為 ApplicationPool Name,⚠️ 但無法遠端連線資料庫,HTTP Module 中的靜態檔案的存取,也會使用 使用 LogOn User 的身分去執行,因此必須要給與靜態檔案 Users / Authenticated Users 的存取權限。

啟用 ASP.NET Impersonation 後,會令 Server Configuration 中的 User Name 改為 Specific User 連線身分中的名稱,同時對於 HTTP Module 中的靜態檔案的存取,也會使用此身分進行代理,但不影響 Services 的使用身分,同時 IIS 會將連線 User / Password 儲存在網頁伺服器的 Config 檔案,如下列路徑:

echo C:\Windows\System32\inetsrv\Config\applicationHost.config

Connect As Specific User

AppPoolIdentity

不需要啟用 ASP.NET Impersonation,藉由設定應用程式集區中的 Identity 來達到遠端資料庫伺服器存取代理,Server Configuration 中的 UserName 為 Specific User,對於 HTTP Module 中的靜態檔案的存取,仍會使用 LogOn User 的身分去執行,此外會使 Services 改以 AD User 身份執行,適用的情境如共用 Storage 的 Web Farm。

AppPoolIdentity

ASP.NET Impersonation

啟用 ASP.NET Impersonation,但不設定 Specifig User,而是由 ASP.NET Impersonation 設定連線所使用的身分。在尚未設定之前會以 NT AUTHORITY\ANONYMOUS LOGON 嘗試連線資料庫伺服器,會連線失敗。此外此時 Server Configuration 的 UserName 為 LogOn User,存取 HTTP Module 中的靜態檔案的亦會使用 LogOn User 的身分去執行。

而在設定完成 ASP.NET Impersonation 連線所使用的身分後,會將 ASP.NET Impersonation 的連線 User / Password 儲存在 Web.config 當中,此時 Server Configuration 的 UserName 仍為 LogOn User,存取 HTTP Module 中的靜態檔案的亦仍會使用 LogOn User 的身分去執行。

ASP.NET Impersonation

參考資料

探究科學的方法

Use Windows Authentication in ASP.NET 2.0

相關連結

IIS 筆記整理

IIS 網頁伺服器的安全設定 (IIS Security Configuration)