Регистрация имени субъекта-службы для подключений Kerberos

Применимо к:SQL Server

Чтобы использовать проверку подлинности Kerberos с SQL Server, оба из следующих условий должны иметь значение true:

  • Компьютеры клиента и сервера должны быть частью одного домена Windows или доверенных доменов.

  • Имя участника-службы (SPN) должно быть зарегистрировано в службе каталогов Active Directory, которая играет роль центра распределения ключей в домене Windows. Имя субъекта-службы после регистрации сопоставляется с учетной записью Windows, запустившей экземпляр службы SQL Server. Если регистрация имени субъекта-службы не выполнена или завершилась неудачно, уровень безопасности Windows не может определить учетную запись, связанную с именем субъекта-службы, и проверка подлинности Kerberos не используется.

    Примечание.

    Если сервер не может автоматически зарегистрировать имя субъекта-службы, имя следует зарегистрировать вручную. См. раздел Регистрация имени участника-службы вручную.

Вы можете убедиться, что подключение использует 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.

Роль имени участника-службы в проверке подлинности

Когда приложение открывает подключение и использует проверку подлинности Windows, SQL Server Native Client передает имя компьютера, имя экземпляра и имя субъекта-службы (необязательно) SQL Server. Если соединение передает имя субъекта-службы, оно используется без изменений.

Если соединение не передает имя субъекта-службы, создается имя субъекта-службы по умолчанию, основанное на используемом протоколе, имени сервера и имени экземпляра.

В обоих предыдущих сценариях имя участника-службы отправляется в центр распределения ключей, чтобы получить токен безопасности для проверки подлинности соединения. Если токен безопасности невозможно получить, проверка подлинности использует NTLM.

Имя участника-службы — это имя, по которому клиент однозначно идентифицирует экземпляр службы. Служба проверки подлинности Kerberos может использовать основное имя для проверки подлинности служб. Когда клиент хочет подключиться к службе, он определяет местонахождение экземпляра службы, составляет для него основное имя, подключается к службе и представляет ей это имя для проверки подлинности.

Примечание.

Сведения в этой статье также относятся к конфигурациям SQL Server, которые используют кластеризацию.

Для входа на SQL Server рекомендуется использовать проверку подлинности Windows. Клиенты, использующие проверку подлинности Windows, проходят проверку подлинности NTLM или Kerberos. В среде Active Directory сначала всегда выполняется проверка подлинности по протоколу Kerberos.

Разрешения

При запуске службы ядра СУБД выполняется попытка регистрации имени субъекта-службы (SPN). Предположим, что учетная запись, запускающая SQL Server, не имеет разрешения на регистрацию имени субъекта-службы в доменных службах Active Directory. В этом случае этот вызов завершается ошибкой, и предупреждение регистрируется как в журнале событий приложения, так и в журнале ошибок SQL Server.

Чтобы зарегистрировать имя субъекта-службы, ядро СУБД должно работать под встроенной учетной записью, например Local System (не рекомендуется), или NETWORK SERVICEучетной записью, которая имеет разрешение на регистрацию имени участника-службы. Вы можете зарегистрировать имя субъекта-службы с помощью учетной записи администратора домена, но это не рекомендуется в рабочей среде. SQL Server можно запустить с помощью виртуальной учетной записи или управляемой учетной записи службы (MSA). Виртуальные учетные записи и MSAs могут зарегистрировать имя субъекта-службы. Если SQL Server не запускается ни под одной из этих учетных записей, имя субъекта-службы не регистрируется при запуске, и администратору домена необходимо зарегистрировать имя вручную.

Форматы имени участника-службы

Формат имени субъекта-службы поддерживает проверку подлинности Kerberos в TCP/IP, именованных каналах и общей памяти. Для именованных экземпляров и экземпляров по умолчанию поддерживаются следующие форматы имени участника-службы.

Именованный экземпляр

  • MSSQLSvc/<FQDN>:[<port> | <instancename>], где:

    • MSSQLSvc — это зарегистрированная служба.
    • <FQDN> — полное доменное имя сервера.
    • <port> — номер порта TCP.
    • <instancename> — имя экземпляра SQL Server.

Экземпляр по умолчанию

  • MSSQLSvc/<FQDN>:<port> | MSSQLSvc/<FQDN>, где:

    • MSSQLSvc — это зарегистрированная служба.
    • <FQDN> — полное доменное имя сервера.
    • <port> — номер порта TCP.
Форматы имени субъекта-службы Описание
MSSQLSvc/<FQDN>:<port>1 Сформированное поставщиком имя участника-службы для экземпляра по умолчанию, когда используется протокол TCP. <port> — номер порта TCP.
MSSQLSvc/<FQDN> Сформированное поставщиком имя участника-службы для экземпляра по умолчанию, когда используется протокол, отличный от TCP. <FQDN> — полное доменное имя.
MSSQLSvc/<FQDN>:<instancename> Сформированное поставщиком имя участника-службы (по умолчанию) для именованного экземпляра, когда используется протокол, отличный от TCP. <instancename> — имя экземпляра SQL Server.

1 Формат имени участника-службы не требует номера порта. Сервер с несколькими портами или протокол, который не использует номера портов, по-прежнему может использовать проверку подлинности Kerberos.

Для подключения TCP/IP, где TCP-порт включен в имя субъекта-службы, SQL Server должен включить протокол TCP для подключения пользователя с помощью проверки подлинности Kerberos.

Автоматическая регистрация имени участника-службы

При запуске экземпляра ядра СУБД SQL Server SQL Server пытается зарегистрировать имя субъекта-службы для службы SQL Server. Если экземпляр остановлен, SQL Server попытается отменить регистрацию имени субъекта-службы (SPN). Для подключения TCP/IP имя субъекта-службы регистрируется в формате MSSQLSvc/<FQDN>:<tcpport>. Именованные экземпляры и экземпляр по умолчанию регистрируются как MSSQLSvc, опираясь на <tcpport> значение, чтобы отличить экземпляры.

Для других подключений, поддерживающих Kerberos, имя субъекта-службы зарегистрировано в формате MSSQLSvc/<FQDN>:<instancename> именованного экземпляра. Формат регистрации экземпляра MSSQLSvc/<FQDN>по умолчанию.

Чтобы предоставить разрешения учетной записи запуска SQL Server, зарегистрировать и изменить имя субъекта-службы, выполните следующие действия.

  1. На компьютере контроллера домена перейдите к пользователям и компьютерам Active Directory.

  2. ВыберитеВид > Дополнительно.

  3. В разделе Компьютеры найдите компьютер SQL Server, а затем щелкните его правой кнопкой мыши и выберите Свойства.

  4. Перейдите на вкладку "Безопасность" и нажмите кнопку "Дополнительно".

  5. В списке, если учетная запись запуска SQL Server не указана, нажмите кнопку "Добавить ", чтобы добавить ее. После добавления выполните следующие действия.

    1. Выберите учетную запись и нажмите кнопку "Изменить".

    2. В разделе "Разрешения" выберите Удостоверенная запись servicePrincipalName.

    3. Выполните прокрутку вниз и в разделе Свойства выберите:

      • Чтение servicePrincipalName
      • Запись servicePrincipalName
    4. Нажмите дважды кнопку ОК.

  6. Закройте окно Пользователи и компьютеры Active Directory.

Если учетная запись службы не обладает разрешениями на регистрацию и отмену регистрации имени участника-службы, возможно, эти действия придется выполнить вручную.

Регистрация имени участника-службы вручную

Чтобы зарегистрировать имя участника-службы вручную, можно использовать средство setpn , встроенное в Windows. setspn.exe — это средство командной строки, позволяющее читать, изменять и удалять свойство каталога субъектов-служб. Это средство также позволяет просматривать текущие имена участников-служб, устанавливать значения по умолчанию для имен участников-служб учетных записей и добавлять или удалять дополнительные имена участников-служб.

Дополнительные сведения о средстве setpn , необходимые разрешения и примеры использования, просмотрите setpn.

В следующем примере демонстрируется синтаксис, используемый для ручной регистрации имени субъекта-службы для соединения TCP/IP с помощью учетной записи пользователя домена.

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:1433 redmond\accountname

Примечание.

Если имя участника-службы уже существует, то перед повторной регистрацией его необходимо удалить. Это можно сделать с помощью setpn с коммутатором -D . В следующих примерах демонстрируется регистрация вручную нового имени участника-службы, основанного на экземпляре. Для экземпляра по умолчанию, использующего учетную запись пользователя домена следует использовать:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com redmond\accountname

Для именованного экземпляра следует использовать:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:instancename redmond\accountname

Дополнительные сведения о конфигурациях группы доступности AlwaysOn см. в статьях "Прослушиватели" и "Kerberos" (SPN).

Клиентские подключения

Указанные пользователями имена участников-служб поддерживаются клиентскими драйверами. Однако если имя субъекта-службы не предоставлено, оно создается автоматически на основе типа клиентского подключения. Для TCP-подключения имя субъекта-службы в формате MSSQLSvc/FQDN:[<port>] используется как для именованных, так и для экземпляров по умолчанию.

Для именованных каналов и подключений к общей памяти имя субъекта-службы в формате MSSQLSvc/<FQDN>:<instancename> используется для именованного экземпляра и MSSQLSvc/<FQDN> используется для экземпляра по умолчанию.

Использование учетной записи службы в качестве имени субъекта-службы

Учетные записи служб могут быть использованы в качестве имен участников-служб. Они указываются с помощью атрибута соединения для проверки подлинности 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;

Параметры проверки подлинности по умолчанию

В следующей таблице описываются значения по умолчанию для проверки подлинности, используемые, основываясь на сценариях регистрации имен участника-службы.

Сценарий Метод проверки подлинности
Имя участника-службы сопоставляется с правильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы или встроенной учетной записью. Например, Local System или NETWORK SERVICE. Локальные соединения используют протокол NTLM, удаленные — протокол Kerberos.
Имя участника-службы является правильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы или встроенной учетной записью. Локальные соединения используют протокол NTLM, удаленные — протокол Kerberos.
Имя участника-службы сопоставляется с неправильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы или встроенной учетной записью. Проверка подлинности не пройдена.
Поиск имени субъекта-службы завершается ошибкой или не сопоставляется с правильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы, встроенной учетной записью, либо не является правильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы или встроенной учетной записью. Протокол NTLM используется в локальных и удаленных соединениях.

Примечание.

Правильным будет сопоставление, при котором зарегистрированное имя субъекта-службы сопоставляется с учетной записью, с помощью которой запущена служба SQL Server.

Комментарии

В выделенном административном соединении (DAC) используется имя субъекта-службы, основанное на имени экземпляра. Проверку подлинности по протоколу Kerberos можно использовать, если имя участника-службы было успешно зарегистрировано. В качестве альтернативы пользователь может указать в качестве имени участника-службы имя учетной записи.

Если во время запуска происходит ошибка регистрации имени субъекта-службы, она заносится в журнал ошибок SQL Server, после чего установка продолжается.

Если дерегистрация имени субъекта-службы завершается сбоем во время завершения работы, эта ошибка записывается в журнал ошибок SQL Server и продолжается завершение работы.

Дальнейшие действия