Sql-Server

作為 NETWORK SERVICE 執行的 Web 應用程序可以連接到 SQL Server,但作為 LOCAL SYSTEM 執行的 Windows 服務不能

  • September 8, 2013

我在 Windows Server 2003 IIS 伺服器上安裝了一個 .net Web 應用程序,在應用程序池中執行NETWORK SERVICE並使用集成安全性連接到另一台機器上的 SQL Server。SQL Server 機器也在執行 Windows Server 2003。因此,Web 應用程序以身份連接,*DOMAIN\COMPUTER$*並且該帳戶在 SQL Server 中有登錄名和使用者,因此一切正常。

我還在連接到同一台 SQL Server 機器的同一台 IIS 伺服器上安裝了一個 .net windows 服務。Windows 服務以身份執行,LOCAL SYSTEM因此也應以身份連接*DOMAIN\COMPUTER$*。我已經在十幾家不同的公司安裝了同樣的產品,通常都可以按我的預期工作,但在最近的一個案例中,windows 服務無法連接到數據庫,出現錯誤:

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

任何想法為什麼對於本地系統而不是網路服務是這種情況?為了在短期內解決這個問題,我不得不改用 SQL Server 登錄,但如果有簡單的解決方案,我更願意使用集成安全性。安全或系統事件日誌中沒有錯誤消息,儘管我沒有做任何事情來啟用額外的日誌記錄。

通常我會假設這是某種 Kerberos/AD 類型的問題,並且遵循這樣的文章有所幫助。但它從 NETWORK SERVICE 工作的事實表明我檢查的正常事情已經正常(例如,SPN 已正確設置並且機器域帳戶已啟用委派?)。那麼到底是什麼設置出錯了呢?

如果沒有客戶 IT 團隊的幫助,我無法訪問伺服器,並且伺服器上安裝了其他應用程序,我需要注意不要中斷,這兩者都使故障排除更加微妙。非常感謝任何有關故障排除的建議!

您可能需要確認安全連接是 NTLM 還是 Kerberos。如果它正在恢復為 NTLM,則連接將是匿名的。

有一個組策略可以在使用 NTLM 時使用電腦標識。

網路安全:允許本地系統為 NTLM 使用電腦身份

http://technet.microsoft.com/en-us/library/jj852275%28v=ws.10%29.aspx


有關如何配置 SPN 以促進 SQL Server 的 Kerberos 身份驗證的詳細資訊:

http://blogs.msdn.com/b/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx

特別要注意以下幾點:

SQL Server 的 SPN 由以下元素組成:

  • ServiceClass:這標識了一般的服務類別。對於 SQL Server,這始終是 MSSQLSvc。
  • 主機:這是執行 SQL Server 的電腦的完全限定域名 DNS。
  • 埠:這是服務正在偵聽的埠號。

例如:MSSQLSvc/myserver.corp.mycomany.com:1433

引用自:https://serverfault.com/questions/537303