MSSQLSvc服务主体名称,Kerberos和NTLM

最近是否帮助DBA解决了一个似乎与无效的SPN有关的问题。 发现很多SQL服务帐户根本没有设置SPN,导致NTLM身份validation。

我已经将SPNconfiguration添加到我们的构build过程中,但是不确定是否返回到使用NTLM的现有系统并configurationSPN以允许Kerberos身份validation会破坏任何内容。

是否有任何configurationMSSQLSvc SPN允许Kerberos身份validation的常见情况会破坏正在运行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 

我担心的是,如果我回到现有的系统并configurationSPN,我可能会破坏现有的应用程序或使用NTLM但不使用Kerberos的进程。 如果需要的话,我认为他们会回到NTLM,但这不是我的专业领域,我不愿意做出这样的假设。

谢谢!

至less你可能有点担心。 不幸的是,一个特定的应用程序是否会被中断或者全部取决于应用程序。 但总体而言,只要您正确设置SPN,任何事情都不会中断。

我的主要build议是: 不正确的SPN比没有SPN更糟糕。

我看到的唯一一个潜在的问题是如果SPN被设置,但设置不正确。

以这个例子:

  • 如果远程客户端尝试向SQL进行身份validation并find有效的SPN,则它将使用Kerberos。
  • 如果远程客户端尝试连接并且找不到SPN,它将使用NTLM。
  • 如果远程客户端尝试连接并findSPN,然后尝试使用该SPN通过Kerberos进行身份validation,但由于SPN无效而失败…它是否仍会故障回到NTLM?

最后一个问题是非常具体的行为,因应用程序和Windows版本而异。

这是一篇很好的后续文章,尽pipe它很古老,但仍然主要是相关的:

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的远程客户端进行testing。 当SPN正确注册时,使用了Kerberos。 当SPN不在时,SQL Management Studio故障转移到NTLM。 当我故意向服务帐户的SPN中引入一个错字时,连接仍然build立,并且故障转移到NTLM。 所以这是一个好消息,但事实是,其他未指定的应用程序可能无法正确实施Windows身份validation来利用协商协议…所以,如果您有奇怪的应用程序,您仍然需要testing它们。 在您的testing中,不要忘记,NTLM将始终用于本地连接,而不pipeSPN是什么…取决于操作系统版本。 :d