Регистрация имени службы для подключений Kerberos
Область применения:SQL Server
Чтобы использовать проверку подлинности Kerberos с SQL Server, должны быть выполнены следующие условия:
Компьютеры клиента и сервера должны быть частью одного домена Windows или доверенных доменов.
Имя основной службы (SPN) должно быть зарегистрировано для Active Directory, которая играет роль центра распределения ключей в домене Windows. SPN после регистрации связывается с учетной записью Windows, которая запустила службу экземпляра SQL Server. Если регистрация имени субъекта-службы не выполнена или завершилась неудачно, уровень безопасности Windows не может определить учетную запись, связанную с именем субъекта-службы, и аутентификация Kerberos не применяется.
Примечание.
Если сервер не может автоматически зарегистрировать SPN, SPN следует зарегистрировать вручную. См. Руководство по регистрации SPN вручную.
Вы можете убедиться, что подключение использует Kerberos, запрашивая динамическое sys.dm_exec_connections
представление управления. Запустите следующий запрос и проверьте значение столбца auth_scheme
, которое будет KERBEROS
, если Kerberos включен.
SELECT auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
Совет
Диспетчер конфигурации Microsoft Kerberos для SQL Server — это диагностическое средство, которое помогает устранять неполадки Kerberos, связанные с проблемами подключения при использовании SQL Server. Дополнительные сведения см. в разделе Диспетчер конфигурации Microsoft Kerberos для SQL Server.
Роль имени службы (SPN) в проверке подлинности
Когда приложение открывает подключение и использует проверку подлинности Windows, SQL Server Native Client передает имя компьютера, имя экземпляра и, при необходимости, СПН SQL Server. Если соединение передает SPN, оно используется без изменений.
Если соединение не передает имя субъекта-службы, создается имя субъекта-службы по умолчанию, основанное на используемом протоколе, имени сервера и имени экземпляра.
В обоих предыдущих сценариях SPN отправляется в центр распределения ключей, чтобы получить токен безопасности для аутентификации соединения. Если токен безопасности невозможно получить, проверка подлинности использует NTLM.
Имя служебного принципала — это имя, по которому клиент однозначно идентифицирует экземпляр службы. Служба аутентификации Kerberos может использовать SPN для аутентификации службы. Когда клиент хочет подключиться к службе, он определяет местонахождение экземпляра службы, формирует для него SPN, подключается к службе и предоставляет это SPN для аутентификации.
Примечание.
Сведения в этой статье также относятся к конфигурациям SQL Server, которые используют кластеризацию.
Для входа на SQL Server рекомендуется использовать проверку подлинности Windows. Клиенты, использующие проверку подлинности Windows, проходят проверку подлинности NTLM или Kerberos. В среде Active Directory сначала всегда выполняется проверка подлинности по протоколу Kerberos.
Разрешения
При запуске службы ядра СУБД выполняется попытка регистрации имени субъекта-службы (SPN). Предположим, что учетная запись, которая запускает SQL Server, не имеет разрешения на регистрацию SPN в доменных службах Active Directory. В этом случае этот вызов завершается ошибкой, и предупреждение регистрируется как в журнале событий приложения, так и в журнале ошибок SQL Server.
Чтобы зарегистрировать SPN, ядро СУБД должно работать под встроенной учетной записью, например Local System
(не рекомендуется), NETWORK SERVICE
, или учетной записью, которой разрешена регистрация SPN. Вы можете зарегистрировать SPN с помощью учетной записи администратора домена, но это не рекомендуется в эксплуатационной среде. SQL Server можно запустить с помощью виртуальной учетной записи или управляемой учетной записи службы (MSA). Виртуальные учетные записи и учетные записи управляемых служб (MSA) могут зарегистрировать SPN (имя субъекта службы). Если SQL Server не работает под одной из этих учетных записей, SPN не регистрируется при запуске, и администратору домена необходимо зарегистрировать его вручную.
Форматы SPN
SPN-формат поддерживает аутентификацию Kerberos по TCP/IP, именованным каналам и общей памяти. Поддерживаемые форматы SPN для именованных и стандартных экземпляров следующие.
Именованный экземпляр
MSSQLSvc/<FQDN>:[<port> | <instancename>], где:
-
MSSQLSvc
— это зарегистрированная служба. -
<FQDN>
— полное доменное имя сервера. -
<port>
— номер порта TCP. -
<instancename>
— имя экземпляра SQL Server.
-
Экземпляр по умолчанию
MSSQLSvc/<FQDN>:<port> | MSSQLSvc/<FQDN>, где:
-
MSSQLSvc
— это служба, которая сейчас регистрируется. -
<FQDN>
— полное доменное имя сервера. -
<port>
— номер порта TCP.
-
Формат SPN | Описание |
---|---|
MSSQLSvc/<FQDN>:<port>
1 |
Сформированное поставщиком, имя SPN по умолчанию при использовании TCP.
<port> — номер порта TCP. |
MSSQLSvc/<FQDN> |
Сформированное поставщиком SPN (имя основного участника службы) для экземпляра по умолчанию, если используется протокол, отличный от TCP.
<FQDN> — полное доменное имя. |
MSSQLSvc/<FQDN>:<instancename> |
Сформированное поставщиком имя участника-службы (по умолчанию) для именованного экземпляра, когда используется протокол, отличный от TCP.
<instancename> — имя экземпляра SQL Server. |
1 Формат SPN не требует номера порта. Сервер с несколькими портами или протокол, который не использует номера портов, по-прежнему может использовать проверку подлинности Kerberos.
Для подключения TCP/IP, где TCP-порт включен в имя субъекта-службы, SQL Server должен включить протокол TCP для подключения пользователя с помощью проверки подлинности Kerberos.
Автоматическая регистрация SPN
При запуске экземпляра SQL Server ядро СУБД SQL Server пытается зарегистрировать SPN (Service Principal Name) для службы SQL Server. Когда экземпляр остановлен, SQL Server попытается снять регистрацию имени службы (SPN). Для подключения TCP/IP имя субъекта-службы (SPN, Service Principal Name) регистрируется в формате MSSQLSvc/<FQDN>:<tcpport>
. Именованные экземпляры и экземпляр по умолчанию регистрируются как MSSQLSvc
, полагаясь на значение <tcpport>
, чтобы отличить экземпляры.
Для других подключений, поддерживающих Kerberos, SPN зарегистрирован в формате MSSQLSvc/<FQDN>:<instancename>
для именованного экземпляра. Формат регистрации экземпляра по умолчанию - MSSQLSvc/<FQDN>
.
Чтобы предоставить права доступа для учетной записи запуска SQL Server для регистрации и изменения SPN, выполните следующие действия.
На компьютере контроллера домена перейдите к Пользователи и компьютеры Active Directory.
Выберите Вид > Расширенные параметры.
В разделе Компьютеры найдите компьютер SQL Server, а затем щелкните его правой кнопкой мыши и выберите Свойства.
Перейдите на вкладку "Безопасность" и нажмите кнопку "Дополнительно".
В списке, если учетная запись запуска SQL Server не указана, нажмите кнопку "Добавить ", чтобы добавить ее. После добавления выполните следующие действия.
Выберите учетную запись и нажмите кнопку "Изменить".
В разделе "Разрешения" выберите Подтверждённая запись servicePrincipalName.
Выполните прокрутку вниз и в разделе Свойства выберите:
- Прочитать servicePrincipalName
- Записать servicePrincipalName
Нажмите дважды кнопку ОК.
Закройте окно Пользователи и компьютеры Active Directory.
Если учетная запись службы не обладает необходимыми разрешениями для регистрации или отмены регистрации SPN (имени главного участника службы), возможно, эти действия придется выполнить вручную.
Регистрация SPN вручную
Чтобы зарегистрировать SPN вручную, можно использовать средство setspn, встроенное в Windows.
setspn.exe
— это средство командной строки, позволяющее читать, изменять и удалять свойство каталога имен субъектов службы (SPN). Это средство также позволяет просматривать текущие SPN, сбрасывать значения SPN по умолчанию для учетных записей, а также добавлять или удалять дополнительные SPN.
Дополнительные сведения о средстве setpn , необходимые разрешения и примеры использования, просмотрите setpn.
В следующем примере демонстрируется синтаксис, используемый для ручной регистрации SPN для соединения TCP/IP с использованием учетной записи пользователя домена.
setspn -S MSSQLSvc/myhost.redmond.microsoft.com:1433 redmond\accountname
Примечание.
Если SPN уже существует, то перед повторной регистрацией его необходимо удалить. Это можно сделать с помощью setspn с переключателем -D
. В следующих примерах демонстрируется, как вручную зарегистрировать новый экземплярный SPN. Для экземпляра по умолчанию, использующего учетную запись пользователя домена, используйте:
setspn -S MSSQLSvc/myhost.redmond.microsoft.com redmond\accountname
Для именованного экземпляра нужно использовать:
setspn -S MSSQLSvc/myhost.redmond.microsoft.com:instancename redmond\accountname
Дополнительные сведения о конфигурациях группы доступности AlwaysOn см. в статьях "Прослушиватели" и "Kerberos" (SPN).
Клиентские подключения
Заданные пользователем SPN (Имена Служебных Принципалов) поддерживаются клиентскими драйверами. Однако если SPN не предоставлено, оно создается автоматически на основе типа клиентского подключения. Для TCP-подключения SPN в формате MSSQLSvc/FQDN:[<port>]
используется и для именованных, и для экземпляров по умолчанию.
Для именованных каналов и подключений к общей памяти SPN формата MSSQLSvc/<FQDN>:<instancename>
используется для именованного экземпляра, а MSSQLSvc/<FQDN>
— для экземпляра по умолчанию.
Использование учетной записи службы в качестве имени объекта-службы
Учетные записи служб могут использоваться как SPN. Они указываются с помощью атрибута соединения для проверки подлинности Kerberos и имеют следующие форматы:
username\@domain
илиdomain\username
для учетной записи пользователя доменаmachine$\@domain
илиhost\FQDN
для учетной записи домена компьютера, напримерLocal System
илиNETWORK SERVICE
.
Чтобы определить метод проверки подлинности соединения, выполните следующий запрос.
SELECT net_transport, auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
Параметры проверки подлинности по умолчанию
В следующей таблице описаны параметры проверки подлинности по умолчанию, которые используются в зависимости от сценариев регистрации SPN.
Сценарий | Метод аутентификации |
---|---|
Заданное имя службы (SPN) сопоставляется с правильной учетной записью домена, виртуальной учетной записью, учетной записью службы (MSA) или встроенной учетной записью. Например, Local System или NETWORK SERVICE . |
Локальные соединения используют протокол NTLM, удаленные — протокол Kerberos. |
SPN является верной учетной записью домена, виртуальной учетной записью, учетной записью MSA или встроенной учетной записью. | Локальные соединения используют протокол NTLM, удаленные — протокол Kerberos. |
Имя участника-службы соотносится с неправильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы (MSA) или встроенной учетной записью. | Ошибка аутентификации |
Поиск имени субъекта-службы завершается ошибкой или не сопоставляется с правильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы, встроенной учетной записью, либо не является правильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы или встроенной учетной записью. | Протокол NTLM используется в локальных и удаленных соединениях. |
Примечание.
Правильно означает, что учетная запись, сопоставленная зарегистрированным SPN, является той учетной записью, под которой выполняется служба SQL Server.
Замечания
В подключении Dedicated Administrator Connection (DAC) используется SPN (имя службы), основанное на имени экземпляра. Аутентификацию с использованием Kerberos можно применять с DAC, если имя участника-службы было успешно зарегистрировано. В качестве альтернативы пользователь может указать имя учетной записи как SPN.
Если во время запуска происходит ошибка регистрации SPN, она заносится в журнал ошибок SQL Server, и запуск продолжается.
Если дерегистрация имени субъекта-службы завершается сбоем во время завершения работы, эта ошибка записывается в журнал ошибок SQL Server, и процесс завершения работы продолжается.
Связанный контент
- Поддержка имени служебного принципала (SPN) в клиентских подключениях в нативном клиенте SQL Server
- Идентификаторы субъектов службы (SPN) в клиентских соединениях (OLE DB)
- Имена субъектов-служб в клиентских соединениях (ODBC)
- Компоненты собственного клиента SQL Server
- Управление проблемами проверки подлинности по протоколу Kerberos в среде служб Reporting Services