Поделиться через


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

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

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

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

    Замечание

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

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

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

Замечание

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

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

Разрешения

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

Замечание

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

Статья базы знаний, «Как использовать проверку подлинности Kerberos в SQL Server», содержит сведения о предоставлении разрешений на чтение или запись имени главного участника службы (SPN) для учетной записи, не обладающей правами администратора домена.

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

Форматы SPN

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

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

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

    • MSSQLSvc — это зарегистрированная служба.

    • FQDN (Fully Qualified Domain Name) — это полностью квалифицированное доменное имя сервера.

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

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

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

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

    • MSSQLSvc — это зарегистрированная служба.

    • FQDN — это полностью квалифицированное доменное имя сервера.

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

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

Замечание

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

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

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

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

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

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

Вручная регистрация SPN

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

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

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

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

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

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

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

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

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

Заданные пользователем SPN (Имена Служебных Принципалов) поддерживаются клиентскими драйверами. Однако если SPN не предоставлено, оно будет создано автоматически на основе типа подключения клиента. Для TCP-подключения SPN в формате MSSQLSvc/FQDN:[порт] используется как для именованных экземпляров, так и для экземпляров по умолчанию.

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

Использование учетной записи службы в качестве SPN (идентификатора службы)

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

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

  • machine$@domain или host\FQDN для учетной записи домена компьютера, например локальной системы или сетевых служб.

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

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

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

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

Сценарий Метод аутентификации
Заданное имя службы (SPN) сопоставляется с правильной учетной записью домена, виртуальной учетной записью, учетной записью службы (MSA) или встроенной учетной записью. Например, локальная система или сетевая служба.

Примечание. Правильно означает, что учетная запись, сопоставленная зарегистрированным SPN, является той учетной записью, под которой работает служба SQL Server.
Локальные соединения используют протокол NTLM, удаленные — протокол Kerberos.
SPN является верной учетной записью домена, виртуальной учетной записью, учетной записью MSA или встроенной учетной записью.

Примечание. Правильно означает, что учетная запись, сопоставленная зарегистрированным именем службы (SPN), является учетной записью, под которой выполняется служба SQL Server.
Локальные соединения используют протокол NTLM, удаленные — протокол Kerberos.
Имя участника-службы соотносится с неправильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы (MSA) или встроенной учетной записью. Ошибка аутентификации
Поиск SPN завершается неудачей или не сопоставляется с правильной учетной записью домена, виртуальной учетной записью, MSA или встроенной учетной записью, либо не является одной из них. Протокол NTLM используется в локальных и удаленных соединениях.

Комментарии

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

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

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

См. также

Поддержка имени субъекта-службы (SPN) в клиентских подключениях
Идентификаторы субъектов службы (SPN) в клиентских соединениях (OLE DB)
Имена субъектов-служб в клиентских соединениях (ODBC)
Компоненты собственного клиента SQL Server
Управление проблемами проверки подлинности по протоколу Kerberos в среде служб Reporting Services