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

Применимо к: даSQL Server (все поддерживаемые версии)

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

  • Компьютеры клиента и сервера должны быть частью одного домена 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.

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

Примечание

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

Для входа на SQL Server рекомендуется использовать проверку подлинности Windows. Проверка подлинности клиентов с проверкой подлинности Windows осуществляется при помощи протоколов NTLM или Kerberos. В среде Active Directory сначала всегда выполняется проверка подлинности по протоколу Kerberos. Проверка подлинности Kerberos не поддерживается клиентами SQL Server 2005 (9.x) с именованными каналами.

Permissions

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

Примечание

Если домен Windows настроен для выполнения в режиме работы ниже Windows Server 2008 R2, учетная запись управляемой службы не будет иметь необходимых разрешений для регистрации имен субъектов-служб для службы Компонент SQL Server Database Engine. Если требуется проверка подлинности Kerberos, администратор домена должен вручную зарегистрировать имена субъектов-служб SQL Server в управляемой учетной записи службы.

Дополнительные сведения см. в разделе Реализация ограниченного делегирования Kerberos в SQL Server 2008

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

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

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

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

    • MSSQLSvc — регистрируемая служба;

    • <FQDN>  — полное доменное имя сервера.

    • <port>  — номер порта TCP.

    • <instancename>  — имя экземпляра SQL Server.

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

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

    • MSSQLSvc — регистрируемая служба;

    • <FQDN>  — полное доменное имя сервера.

    • <port>  — номер порта TCP.

    Примечание

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

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

Примечание

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

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

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

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

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

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

Для регистрации имени участника-службы вручную администратор должен запустить средство Setspn.exe, поставляемое со средствами поддержки Microsoft Windows Server 2003 . Дополнительные сведения см. в статье базы знаний Средства поддержки Windows Server 2003 с пакетом обновления 1 (SP1) .

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

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

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

Примечание

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

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

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

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

Клиентские соединения

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

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

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

Учетные записи служб могут быть использованы в качестве имен участников-служб. Они указываются с помощью атрибута соединения для проверки подлинности Kerberos и имеют следующие форматы:

  • имя_пользователя@домен или домен\имя_пользователя для учетной записи пользователя домена;

  • машина$@домен или хост\полное_доменное_имя для учетной записи домена, такой как Local System или NETWORK SERVICES.

Чтобы определить метод проверки подлинности соединения, выполните следующий запрос.

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, после чего выключение продолжается.

См. также