作為網路服務運行的 Web 應用程式可以連接到 SQL Server,但作為本機系統執行的 Windows 服務無法連接

作為網路服務運行的 Web 應用程式可以連接到 SQL Server,但作為本機系統執行的 Windows 服務無法連接

我在 Windows Server 2003 IIS 伺服器上安裝了一個 .net Web 應用程序,在應用程式集區中運行,NETWORK SERVICE並使用整合安全性連接到另一台電腦上的 SQL Server。 SQL Server 電腦也執行 Windows Server 2003。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 類型的問題,而以下文章有助於。但它在網路服務中工作的事實表明,我檢查的正常內容已經沒問題(例如,SPN 已正確設置,並且電腦網域帳戶已啟用委派?)。那麼到底是哪個設定出了問題呢?

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

答案1

您可能需要確認安全連線是 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

答案2

我還是賭SPN有問題。不要只是假設它們就在那裡。檢查 SQL Server 的 SPN 註冊是否正確。也要檢查是否有重複項 ( setspn -x)。

Network Service之所以有效,是因為當 SPN 不存在時,它仍然可以回退到 NTLM 驗證。

Local System不起作用,因為它只能存取網路資源,就DOMAIN\Computer$好像它能夠使用 Kerberos 一樣。否則,它會回退到空會話,這就是您看到的原因Anonymous Logon

相關內容