Active-Directory

MSSQLSvc 服務主體名稱、Kerberos 和 NTLM

  • June 25, 2014

最近正在幫助 DBA 解決似乎與無效 SPN 相關的問題。發現大量 SQL 服務帳戶根本沒有設置 SPN,從而導致 NTLM 身份驗證。

我已將 SPN 配置添加到我們的建構過程中,但我不確定使用 NTLM 回到現有系統並配置 SPN 以允許 Kerberos 身份驗證是否會破壞任何東西。

是否存在配置 MSSQLSvc SPN 以允許 Kerberos 身份驗證的任何常見情況,這會破壞通過 NTLM 正常執行的現有系統?

這是我正在使用的程式碼:

#Query to identify authentication type for various connections on a SQL server
   $query = "SELECT
       s.session_id,
       c.connect_time,
       s.login_time,
       s.login_name,
       c.protocol_type,
       c.auth_scheme,
       s.HOST_NAME,
       s.program_name
   FROM sys.dm_exec_sessions s
   JOIN sys.dm_exec_connections c
   ON s.session_id = c.session_id"

#Everything comes back NTLM
#Source: https://raw.githubusercontent.com/RamblingCookieMonster/PowerShell/master/Invoke-Sqlcmd2.ps1
   Invoke-Sqlcmd2 -ServerInstance ServerInQuestion -query $query

#Get a list of SPNs associated with ServerInQuestion
#Results indicate no SPNs exist
#Source: http://gallery.technet.microsoft.com/scriptcenter/Get-SPN-Get-Service-3bd5524a
   Get-SPN -ServiceType MSSQLSvc -ComputerName ServerInQuestion

#Configuring SPNs for test systems results in Kerberos working without issue
   setspn -A "MSSQLSvc/ServerInQuestion.DOMAIN.XXX:1433" DOMAIN\SVCACCOUNT
   setspn -A "MSSQLSvc/ServerInQuestion.DOMAIN.XXX" DOMAIN\SVCACCOUNT

我擔心的是,如果我回到現有系統並配置 SPN,我可能會破壞使用 NTLM 但不使用 Kerberos 的現有應用程序或程序。我認為如果需要他們會退回到 NTLM,但這不是我的專業領域,我不願意做出這樣的假設。

謝謝!

你至少有點擔心可能是對的。不幸的是,特定應用程序是否會中斷完全取決於應用程序。但總的來說,只要您正確設置了 SPN,就不太可能出現任何問題。

我的主要建議是: 不正確的 SPN 比根本沒有 SPN 更糟糕。

我認為對您來說唯一可能存在的問題是是否設置了 SPN,但設置不正確。

舉個例子:

  • 如果遠端客戶端嘗試對 SQL 進行身份驗證並找到有效的 SPN,它將使用 Kerberos。
  • 如果遠端客戶端嘗試連接但沒有找到 SPN,它將使用 NTLM。
  • 如果遠端客戶端嘗試連接並找到一個 SPN,然後嘗試使用該 SPN 通過 Kerberos 進行身份驗證,但由於 SPN 無效而失敗……它是否仍會故障返回到 NTLM?

最後一個問題是非常具體的行為,因應用程序和 Windows 版本而異。

這是一篇很好的後續文章,儘管它很舊,但仍然主要相關:

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


更新:

如果有什麼安慰的話,我只是使用 SQL Server 2012 和一個執行 Server 2012 R2 和 SQL Management Studio 的遠端客戶端進行了測試。正確註冊 SPN 後,使用了 Kerberos。當 SPN 不存在時,SQL Management Studio 故障轉移到 NTLM。當我故意在服務帳戶的 SPN 中引入錯字時,連接仍然建立,並故障轉移到 NTLM。所以這是個好消息,但事實仍然是其他未指定的應用程序可能無法正確實現 Windows 身份驗證以利用該協商協議……所以如果您有奇怪的應用程序,您仍然需要測試它們。在您的測試中,不要忘記 NTLM 將始終用於本地連接,無論 SPN 是什麼……取決於作業系統版本。:D

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