作為 NETWORK SERVICE 執行的 Web 應用程序可以連接到 SQL Server,但作為 LOCAL SYSTEM 執行的 Windows 服務不能
我在 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 身份驗證的詳細資訊:
特別要注意以下幾點:
SQL Server 的 SPN 由以下元素組成:
- ServiceClass:這標識了一般的服務類別。對於 SQL Server,這始終是 MSSQLSvc。
- 主機:這是執行 SQL Server 的電腦的完全限定域名 DNS。
- 埠:這是服務正在偵聽的埠號。
例如:MSSQLSvc/myserver.corp.mycomany.com:1433