Регистрация имени участника-службы для соединений KerberosRegister a Service Principal Name for Kerberos Connections

Чтобы использовать проверку подлинности Kerberos с SQL ServerSQL Server , необходимо наличие следующих условий.To use Kerberos authentication with SQL ServerSQL Server requires both the following conditions to be true:

  • Компьютеры клиента и сервера должны быть частью одного домена Windows или доверенных доменов.The client and server computers must be part of the same Windows domain, or in trusted domains.

  • Имя участника-службы (SPN) должно быть зарегистрировано в службе каталогов Active Directory, которая играет роль центра распределения ключей в домене Windows.A Service Principal Name (SPN) must be registered with Active Directory, which assumes the role of the Key Distribution Center in a Windows domain. Имя участника-службы после регистрации сопоставляется учетной записи Windows, запустившей экземпляр службы SQL ServerSQL Server .The SPN, after it is registered, maps to the Windows account that started the SQL ServerSQL Server instance service. Если регистрация имени участника-службы не была выполнена или завершилась неудачно, уровень безопасности Windows не может определить учетную запись, связанную с именем участника-службы, и проверка подлинности Kerberos не может быть использована.If the SPN registration has not been performed or fails, the Windows security layer cannot determine the account associated with the SPN, and Kerberos authentication will not be used.

    Примечание

    Если сервер не может автоматически зарегистрировать имя участника-службы, оно должно быть зарегистрировано вручную.If the server cannot automatically register the SPN, the SPN must be registered manually. См. раздел Регистрация имени участника-службы вручную.See Manual SPN Registration.

Можно определить, что соединение использует протокол Kerberos, запросив динамическое административное представление sys.dm_exec_connections.You can verify that a connection is using Kerberos by querying the sys.dm_exec_connections dynamic management view. Выполните следующий запрос и проверьте значение в столбце auth_scheme, которое будет равно «KERBEROS», если включен протокол Kerberos.Run the following query and check the value of the auth_scheme column, which will be "KERBEROS" if Kerberos is enabled.

SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid ;  

Совет

MicrosoftMicrosoft диспетчер конфигурации Kerberos для SQL ServerSQL Server — это диагностическое средство, которое помогает расследовать проблемы Kerberos со связью при использовании SQL ServerSQL Server.MicrosoftMicrosoft Kerberos Configuration Manager for SQL ServerSQL Server is a diagnostic tool that helps troubleshoot Kerberos related connectivity issues with SQL ServerSQL Server. Дополнительные сведения см. в разделе Диспетчер конфигурации Microsoft Kerberos для SQL Server.For more information, see Microsoft Kerberos Configuration Manager for SQL Server.

Роль имени участника-службы при проверке подлинностиThe Role of the SPN in Authentication

Когда приложение открывает соединение и использует проверку подлинности Windows, SQL ServerSQL Server Native Client передает SQL ServerSQL Server имя компьютера, имя экземпляра и имя участника-службы (необязательно).When an application opens a connection and uses Windows Authentication, SQL ServerSQL Server Native Client passes the SQL ServerSQL Server computer name, instance name and, optionally, an SPN. Если соединение передает имя участника-службы, то имя используется без изменений.If the connection passes an SPN it is used without any changes.

Если соединение не передает имя участника-службы, создается имя участника-службы по умолчанию, основанное на используемом протоколе, имени сервера и имени экземпляра.If the connection does not pass an SPN, a default SPN is constructed based on the protocol used, server name, and the instance name.

В обоих предыдущих сценариях имя участника-службы отправляется в центр распределения ключей, чтобы получить токен безопасности для проверки подлинности соединения.In both of the preceding scenarios, the SPN is sent to the Key Distribution Center to obtain a security token for authenticating the connection. Если токен безопасности не может быть получен, используется проверка подлинности NTLM.If a security token cannot be obtained, authentication uses NTLM.

Имя участника-службы (service primary name, SPN) — это имя, по которому клиент единственным образом распознает экземпляр службы.A service principal name (SPN) is the name by which a client uniquely identifies an instance of a service. Служба проверки подлинности Kerberos может использовать основное имя для проверки подлинности служб.The Kerberos authentication service can use an SPN to authenticate a service. Когда клиент хочет подключиться к службе, он определяет местонахождение экземпляра службы, составляет для него основное имя, подключается к службе и представляет ей это имя для проверки подлинности.When a client wants to connect to a service, it locates an instance of the service, composes an SPN for that instance, connects to the service, and presents the SPN for the service to authenticate.

Примечание

Сведения, приводимые в этом разделе, применимы также в конфигурациях SQL ServerSQL Server , использующих кластеризацию.The information that is provided in this topic also applies to SQL ServerSQL Server configurations that use clustering.

Для входа на SQL Server рекомендуется использовать проверку подлинности Windows.Windows Authentication is the preferred method for users to authenticate to SQL Server. Проверка подлинности клиентов с проверкой подлинности Windows осуществляется при помощи протоколов NTLM или Kerberos.Clients that use Windows Authentication are authenticated by either using NTLM or Kerberos. В среде Active Directory сначала всегда выполняется проверка подлинности по протоколу Kerberos.In an Active Directory environment, Kerberos authentication is always attempted first. Проверка подлинности Kerberos не поддерживается клиентами SQL Server 2005SQL Server 2005 с именованными каналами.Kerberos authentication is not available for SQL Server 2005SQL Server 2005 clients using named pipes.

PermissionsPermissions

При запуске службы компонента Компонент Database EngineDatabase Engine она пытается зарегистрировать имя участника-службы (SPN).When the Компонент Database EngineDatabase Engine service starts, it attempts to register the Service Principal Name (SPN). Если у учетной записи, с которой запускается SQL Server, нет права регистрировать имя участника-службы в службах домена Active Directory, вызов завершится ошибкой и в журнал событий приложений, а также в журнал ошибок SQL Server будет добавлено предупреждение.If the account starting SQL Server doesn't have permission to register a SPN in Active Directory Domain Services, this call will fail and a warning message will be logged in the Application event log as well as the SQL Server error log. Для регистрации имени участника-службы компонент Компонент Database EngineDatabase Engine должен выполняться от имени встроенной учетной записи, например Local System (не рекомендуется) или NETWORK SERVICE, либо от имени учетной записи, обладающей разрешением на регистрацию имен участников-служб, например учетной записи администратора домена.To register the SPN, the Компонент Database EngineDatabase Engine must be running under a built-in account, such as Local System (not recommended), or NETWORK SERVICE, or an account that has permission to register an SPN, such as a domain administrator account. Если SQL ServerSQL Server выполняется в ОС Windows 7Windows 7 или Windows Server 2008 R2Windows Server 2008 R2 , можно выполнить SQL ServerSQL Server с помощью виртуальной учетной записи или управляемой учетной записи службы.When SQL ServerSQL Server is running on the Windows 7Windows 7 or Windows Server 2008 R2Windows Server 2008 R2 operating system, you can run SQL ServerSQL Server using a virtual account or a managed service account (MSA). Виртуальные счета и управляемые учетные записи службы могут зарегистрировать имя участника-службы.Both virtual accounts and MSA's can register an SPN. Если SQL ServerSQL Server выполняется под другой учетной записью, то имя участника-службы не регистрируется при запуске, и администратору домена необходимо произвести его регистрацию вручную.If SQL ServerSQL Server is not running under one of these accounts, the SPN is not registered at startup and the domain administrator must register the SPN manually.

Примечание

Если домен Windows настроен для выполнения в режиме работы ниже Windows Server 2008 R2Windows Server 2008 R2 Windows Server 2008 R2, то управляемая учетная запись службы не будет иметь необходимых разрешений для регистрации имен участника-службы для службы Компонент SQL Server Database EngineSQL Server Database Engine .When the Windows domain is configured to run at less than the Windows Server 2008 R2Windows Server 2008 R2 Windows Server 2008 R2 functional level, then the Managed Service Account will not have the necessary permissions to register the SPNs for the Компонент SQL Server Database EngineSQL Server Database Engine service. Если требуется проверка подлинности по протоколу Kerberos, администратор домена должен вручную зарегистрировать SQL ServerSQL Server имена участников-службы в управляемой учетной записи службы.If Kerberos authentication is required, the Domain Administrator should manually register the SQL ServerSQL Server SPNs on the Managed Service Account.

В статье базы знаний Использование проверки подлинности протокола Kerberos в SQL Serverсодержатся сведения о том, как предоставить разрешения на чтение или запись имен участника-службы учетным записям, не являющимся администраторами домена.The KB article, How to use Kerberos authentication in SQL Server, contains information about how to grant read or write permission to an SPN for an account that is not a Domain Administrator.

Дополнительные сведения см. в разделе Реализация ограниченного делегирования Kerberos в SQL Server 2008Additional information is available at How to Implement Kerberos Constrained Delegation with SQL Server 2008

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

Начиная с версии SQL Server 2008SQL Server 2008, формат имени участника-службы был изменен для обеспечения поддержки проверки подлинности протокола Kerberos для TCP/IP, именованных каналов и общей памяти.Beginning with SQL Server 2008SQL Server 2008, the SPN format is changed in order to support Kerberos authentication on TCP/IP, named pipes, and shared memory. Для именованных экземпляров и экземпляров по умолчанию поддерживаются следующие форматы имени участника-службы.The supported SPN formats for named and default instances are as follows.

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

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

    • MSSQLSvc — регистрируемая служба;MSSQLSvc is the service that is being registered.

    • FQDN — полное доменное имя сервера.FQDN is the fully qualified domain name of the server.

    • Port — номер TCP-порта.port is the TCP port number.

    • instanceName — имя SQL ServerSQL Server экземпляра.instancename is the name of the SQL ServerSQL Server instance.

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

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

    • MSSQLSvc — регистрируемая служба;MSSQLSvc is the service that is being registered.

    • FQDN — полное доменное имя сервера.FQDN is the fully qualified domain name of the server.

    • Port — номер TCP-порта.port is the TCP port number.

Новый формат имени участника-службы не требует наличия номера порта.The new SPN format does not require a port number. В результате этого серверы с несколькими портами и протоколы, не использующие номера портов, смогут использовать проверку подлинности Kerberos.This means that a multiple-port server or a protocol that does not use port numbers can use Kerberos authentication.

Примечание

В случае соединения по TCP/IP, когда TCP-порт является частью имени участника-службы, SQL ServerSQL Server должен включить протокол TCP, чтобы пользователь мог подключиться с проверкой подлинности протокола Kerberos.In the case of a TCP/IP connection, where the TCP port is included in the SPN, SQL ServerSQL Server must enable the TCP protocol for a user to connect by using Kerberos authentication.

MSSQLSvc/FQDN: портMSSQLSvc/fqdn:port Сформированное поставщиком имя участника-службы для экземпляра по умолчанию, когда используется протокол TCP.The provider-generated, default SPN when TCP is used. port — номер TCP-порта.port is a TCP port number.
MSSQLSvc/полное доменное имяMSSQLSvc/fqdn Сформированное поставщиком имя участника-службы для экземпляра по умолчанию, когда используется протокол, отличный от TCP.The provider-generated, default SPN for a default instance when a protocol other than TCP is used. полное доменное имя является полным доменным именем.fqdn is a fully-qualified domain name.
MSSQLSvc/FQDN: instancenameMSSQLSvc/fqdn:InstanceName Сформированное поставщиком имя участника-службы (по умолчанию) для именованного экземпляра, когда используется протокол, отличный от TCP.The provider-generated, default SPN for a named instance when a protocol other than TCP is used. InstanceName — имя экземпляра SQL ServerSQL Server .InstanceName is the name of an instance of SQL ServerSQL Server.

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

Когда запускается экземпляр компонента Компонент SQL Server Database EngineSQL Server Database Engine , SQL ServerSQL Server пытается зарегистрировать имя участника-службы (SPN) для службы SQL ServerSQL Server .When an instance of the Компонент SQL Server Database EngineSQL Server Database Engine starts, SQL ServerSQL Server tries to register the SPN for the SQL ServerSQL Server service. Когда экземпляр остановлен, SQL ServerSQL Server пытается отменить регистрацию имени участника-службы (SPN).When the instance is stopped, SQL ServerSQL Server tries to unregister the SPN. Для подключения по протоколу TCP/IP имя участника-службы регистрируется в формате *MSSQLSvc/ <FQDN> *: <tcpport> . Как именованные экземпляры, так и экземпляр по умолчанию регистрируются как MSSQLSvc, полагается на <tcpport> значение для различения экземпляров.For a TCP/IP connection the SPN is registered in the format MSSQLSvc/<FQDN>:<tcpport>.Both named instances and the default instance are registered as MSSQLSvc, relying on the <tcpport> value to differentiate the instances.

Для других соединений, поддерживающих протокол Kerberos, имя субъекта-службы регистрируется в формате *MSSQLSvc/ <FQDN> *: <instancename> для именованного экземпляра.For other connections that support Kerberos the SPN is registered in the format MSSQLSvc/<FQDN>:<instancename> for a named instance. Для регистрации экземпляра по умолчанию используется формат *MSSQLSvc/ <FQDN> *.The format for registering the default instance is MSSQLSvc/<FQDN>.

Если учетная запись службы не обладает разрешениями на регистрацию и отмену регистрации имени участника-службы, возможно, эти действия придется выполнить вручную.Manual intervention might be required to register or unregister the SPN if the service account lacks the permissions that are required for these actions.

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

Для регистрации имени участника-службы вручную администратор должен запустить средство Setspn.exe, поставляемое со средствами поддержки Microsoft Windows Server 2003Windows Server 2003 .To register the SPN manually, the administrator must use the Setspn.exe tool that is provided with the Microsoft Windows Server 2003Windows Server 2003 Support Tools. Дополнительные сведения см. в статье базы знаний Средства поддержки Windows Server 2003 с пакетом обновления 1 (SP1) .For more information, see the Windows Server 2003 Service Pack 1 Support Tools KB article.

Setspn.exe — это средство командной строки, позволяющее считывать, изменять и удалять свойство каталога имен участников-служб (SPN).Setspn.exe is a command line tool that enables you to read, modify, and delete the Service Principal Names (SPN) directory property. Это средство также позволяет просматривать текущие имена участников-служб, устанавливать значения по умолчанию для имен участников-служб учетных записей и добавлять или удалять дополнительные имена участников-служб.This tool also enables you to view the current SPNs, reset the account's default SPNs, and add or delete supplemental SPNs.

В следующем примере показывается синтаксис, используемый для регистрации вручную имени участника-службы для соединения TCP/IP.The following example illustrates the syntax used to register manually register an SPN for a TCP/IP connection.

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

Примечание. Если имя участника-службы уже существует, то перед повторной регистрацией его необходимо удалить.Note If an SPN already exists, it must be deleted before it can be reregistered. Это можно сделать, используя команду setspn с параметром -D .You do this by using the setspn command together with the -D switch. В следующих примерах демонстрируется регистрация вручную нового имени участника-службы, основанного на экземпляре.The following examples illustrate how to manually register a new instance-based SPN. Для экземпляра по умолчанию следует использовать:For a default instance, use:

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

Для именованного экземпляра следует использовать:For a named instance, use:

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

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

Указанные пользователями имена участников-служб поддерживаются клиентскими драйверами.User-specified SPNs are supported in client drivers. Однако имя участника-службы не предоставляется, оно будет автоматически сформировано, основываясь на типе клиентского соединения.However, if an SPN is not provided, it will be generated automatically based on the type of a client connection. Для соединений TCP, именованных экземпляров и экземпляров по умолчанию используется имя участника-службы в формате MSSQLSvc/FQDN:[port].For a TCP connection, an SPN in the format MSSQLSvc/FQDN:[port] is used for both the named and default instances.

Для именованных каналов и подключений общей памяти имя участника-службы в формате MSSQLSvc / FQDN:instanceName используется для именованного экземпляра, MSSQLSvcа / для экземпляра по умолчанию используетсяполное доменное имя MSSQLSvc.For named pipes and shared memory connections, an SPN in the format MSSQLSvc/FQDN:instancename is used for a named instance and MSSQLSvc/FQDN is used for the default instance.

Использование учетной записи службы в качестве имени участника-службыUsing a service account as an SPN

Учетные записи служб могут быть использованы в качестве имен участников-служб.Service accounts can be used as an SPN. Они указываются с помощью атрибута соединения для проверки подлинности протокола Kerberos и имеют следующие форматы:They are specified through the connection attribute for the Kerberos authentication and take the following formats:

  • **username@domain**или домен \ имя_пользователя для учетной записи пользователя домена**username@domain** or domain\username for a domain user account

  • **machine$@domain** или host\FQDN для учетной записи домена, такой как "Local System" или "NETWORK SERVICES".**machine$@domain** or host\FQDN for a computer domain account such as Local System or NETWORK SERVICES.

Чтобы определить метод проверки подлинности соединения, выполните следующий запрос.To determine the authentication method of a connection, execute the following query.

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

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

В следующей таблице описываются значения по умолчанию для проверки подлинности, используемые, основываясь на сценариях регистрации имен участника-службы.The following table describes the authentication defaults that are used based on SPN registration scenarios.

СценарийScenario Метод проверки подлинностиAuthentication method
Имя участника-службы сопоставляется с правильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы или встроенной учетной записью.The SPN maps to the correct domain account, virtual account, MSA, or built-in account. Например, «Local System» или «NETWORK SERVICE».For example, Local System or NETWORK SERVICE.

Примечание. правильное значение означает, что учетная запись, сопоставленная зарегистрированным именем субъекта-службы, является учетной записью, под которой выполняется служба SQL Server.Note: Correct means that the account mapped by the registered SPN is the account that the SQL Server service is running under.
Локальные соединения используют протокол NTLM, удаленные — протокол Kerberos.Local connections use NTLM, remote connections use Kerberos.
Имя участника-службы является правильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы или встроенной учетной записью.The SPN is the correct domain account, virtual account, MSA, or built-in account.

Примечание. правильное значение означает, что учетная запись, сопоставленная зарегистрированным именем субъекта-службы, является учетной записью, под которой выполняется служба SQL Server.Note: Correct means that the account mapped by the registered SPN is the account that the SQL Server service is running under.
Локальные соединения используют протокол NTLM, удаленные — протокол Kerberos.Local connections use NTLM, remote connections use Kerberos.
Имя участника-службы сопоставляется с неправильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы или встроенной учетной записью.The SPN maps to an incorrect domain account, virtual account, MSA, or built-in account Проверка подлинности не пройдена.Authentication fails.
Поиск имени участника-службы завершается неудачно или не сопоставляется с правильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы, встроенной учетной записью, либо оно не является правильной учетной записью домена, виртуальной учетной записью, управляемой учетной записью службы или встроенной учетной записью.The SPN lookup fails or does not map to a correct domain account, virtual account, MSA, or built-in account, or is not a correct domain account, virtual account, MSA, or built-in account. Протокол NTLM используется в локальных и удаленных соединениях.Local and remote connections use NTLM.

КомментарииComments

В выделенном административном соединении (DAC) используется имя участника-службы, основанное на имени экземпляра.The Dedicated Administrator Connection (DAC) uses an instance name based SPN. Проверку подлинности по протоколу Kerberos можно использовать, если имя участника-службы было успешно зарегистрировано.Kerberos authentication can be used with a DAC if that SPN is registered successfully. В качестве альтернативы пользователь может указать в качестве имени участника-службы имя учетной записи.As an alternative a user can specify the account name as an SPN.

Если во время запуска происходит ошибка регистрации имени участника-службы, она заносится в журнал ошибок SQL ServerSQL Server , после чего установка продолжается.If SPN registration fails during startup, this failure is recorded in the SQL ServerSQL Server error log, and startup continues.

Если во время выключения происходит ошибка отмены регистрации имени участника-службы, она заносится в журнал ошибок SQL ServerSQL Server , после чего выключение продолжается.If SPN de-registration fails during shutdown, this failure is recorded in the SQL ServerSQL Server error log, and shutdown continues.

См. также:See Also

Поддержка имени участника-службы (SPN) в клиентских соединениях Service Principal Name (SPN) Support in Client Connections
Имена участника-службы (SPN) в клиентских соединениях (OLE DB) Service Principal Names (SPNs) in Client Connections (OLE DB)
Имена участника-службы (SPN) в клиентских соединениях (ODBC) Service Principal Names (SPNs) in Client Connections (ODBC)
Компоненты собственного клиента SQL Server SQL Server Native Client Features
Управление проблемами проверки подлинности по протоколу Kerberos в средах служб Reporting ServiceManage Kerberos Authentication Issues in a Reporting Services Environment