Назад | Перейти на главную страницу

Имена участников службы MSSQLSvc, Kerberos и NTLM

Недавно помогал администратору баз данных с проблемой, которая, казалось, была связана с недопустимым 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 и найдет действительное имя участника-службы, он будет использовать 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