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

Чтобы использовать проверку подлинности 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 с именованными каналами.

Разрешения

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

ПримечаниеПримечание

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

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

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

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

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

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

  • MSSQLSvc/FQDN:[port | имя_экземпляра], где:

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

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

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

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

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

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

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

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

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

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

ПримечаниеПримечание

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

MSSQLSvc/fqdn:port

Сформированное поставщиком имя участника-службы для экземпляра по умолчанию, когда используется протокол TCP. port — номер TCP-порта.

MSSQLSvc/fqdn

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

MSSQLSvc/fqdn:InstanceName

Сформированное поставщиком имя участника-службы (по умолчанию) для именованного экземпляра, когда используется протокол, отличный от TCP. InstanceName — имя экземпляра SQL Server.

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

Когда запускается экземпляр компонента Компонент 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 accountname

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

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

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

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

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

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

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

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

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

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

  • machine$@domain или host\FQDN для учетной записи домена, такой как «Local System» или «NETWORK SERVICES».

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

SELECT net_transport, auth_scheme 
FROM sys.dm_exec_connections 
WHERE session_id = @@SPID;

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

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

Сценарий

Метод проверки подлинности

Имя участника-службы сопоставляется с правильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы или встроенной учетной записью. Например, «Local System» или «NETWORK SERVICE».

ПримечаниеПримечание

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

Локальные соединения используют протокол NTLM, удаленные — протокол Kerberos.

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

ПримечаниеПримечание

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

Локальные соединения используют протокол NTLM, удаленные — протокол Kerberos.

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

Проверка подлинности не пройдена.

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

Протокол NTLM используется в локальных и удаленных соединениях.

Комментарии

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

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

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

См. также

Основные понятия

Поддержка имени участника-службы в клиентских соединениях

Имена участника-службы в клиентских соединениях (OLE DB)

Имена участника-службы в клиентских соединениях (ODBC)

Другие ресурсы

Компоненты собственного клиента SQL Server

Проблемы проверки подлинности по протоколу Kerberos разрешаются в среде служб Reporting Services