Asp.net

為 asp.net 應用程序連接 sql server(Windows 身份驗證與 SQL Server 身份驗證)的最佳方式

  • October 27, 2014

我有一個數據庫和一個具有表單身份驗證的站點。它在 VS2008 上執行良好。這一次,我使用的是“Trusted_connection =True”。但是當它從外部或直接從瀏覽器打開時,我收到錯誤“使用者’NT AUTHORITY\ANONYMOUS LOGON’登錄失敗。”

我知道這是由於許可。SQL 伺服器基於 Windows 身份驗證。

  • 管理使用者連接 SQL Server 的最佳方法是什麼?
  • 我應該啟用 SQL Server 身份驗證嗎?

讓我知道該怎麼做才能使生產感覺良好,並且在部署過程中不會出現任何問題。

注意:SQL Server 安裝在域伺服器上。

站點身份驗證與 ASP 和 SQL 之間的身份驗證無關。“表單身份驗證”實際上不是真正的身份驗證形式,只是 ASP.Net 應用程序的角色和成員資格,與安全基礎結構無關。

當您從 Visual Studio 執行您的站點時,您將在您自己的帳戶下啟動 Visual Studio Web 伺服器,並且此 Web 伺服器將使用 NTLM/Kerberos 對 SQL Server 進行身份驗證,因為它是在您的憑據下執行的。

當您從瀏覽器訪問該站點時,您的站點正在以所述應用程序池的身份從 IIS 應用程序池執行,該應用程序池通常是名為 IUSER_ 的本地使用者…此本地使用者,當使用 NTLM/ 向 SQL Server 進行身份驗證時Kerberos 將作為匿名使用者進行身份驗證,因為本地帳戶在託管 SQL Server 的遠端電腦/域上沒有任何意義。

解決方案是將應用程序池標識更改為可以通過 SQL Server 進行良好身份驗證的使用者。為此,IIS 主機必須加入與 SQL Server 主機相同的域(或信任 SQL Server 主機域的域),並且必須將應用程序池標識更改為來自該域的帳戶。因此,如果 SQL Server 機器在加入域 FOO 的機器上執行,則:

  • 確保 IIS 機器已加入 FOO
  • 創建域使用者 FOO\MyWebApp
  • 將應用程序池標識更改為 FOO\MyWebApp
  • 為 FOO\MyWebApp 添加 SQL 登錄
  • 將 SQL 中的必要權限授予 FOO\MyWebApp

使用 SQL 身份驗證的替代方法不好,原因有幾個(可能會在 web.config 中公開密碼,可能會在線上身份驗證期間公開密碼)。如果 IIS 主機未加入域,那麼您可以使用鏡像帳戶(在 IIS 主機和 SQL 主機上具有相同名稱和密碼的本地帳戶)但這也是有缺陷的:不能使用 Kerberos,帳戶密碼必須是在兩台主機上保持同步等。

引用自:https://stackoverflow.com/questions/2432793