我在 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 驗證的詳細資訊:
特別要注意以下幾點:
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
。