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

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

Скачать драйвер OLE DB

Начиная с SQL Server 2008 (10.0.x), поддержка имен субъектов-служб (SPN) была расширена, чтобы обеспечить взаимную проверку подлинности по всем протоколам. В предыдущих версиях SQL Server имена субъектов-служб поддерживались только для протокола Kerberos через TCP, когда имя по умолчанию для экземпляра SQL Server было зарегистрировано в Active Directory.

Имена субъектов-служб используются протоколом проверки подлинности для определения учетной записи, от которой запускается экземпляр SQL Server. Если учетная запись экземпляра известна, то можно использовать проверку подлинности Kerberos для взаимной проверки подлинности клиентом и сервером. Если учетная запись экземпляра неизвестна, то используется проверка подлинности NTLM, которая обеспечивает только проверку подлинности клиента сервером. В настоящее время драйвер Microsoft OLE DB Driver for SQL Server выполняет подстановку для проверки подлинности, получая имя субъекта-службы из имени экземпляра и свойств сетевого подключения. Экземпляры SQL Server попытаются зарегистрировать имена субъектов-служб при запуске, но их можно также зарегистрировать вручную. Однако регистрация завершится ошибкой, если учетная запись, которая пытается зарегистрировать имена участников-служб, не имеет достаточных прав доступа.

Учетные записи домена и компьютера автоматически регистрируются в Active Directory. Их можно использовать в качестве имен субъектов-служб, или же администраторы могут определить собственные имена субъектов-служб. В SQL Server безопасная проверка подлинности стала более управляемой и надежной благодаря возможности для клиента напрямую указывать используемое имя субъекта-службы.

Примечание

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

Совет

Microsoft Диспетчер конфигурации Kerberos для SQL Server — это диагностическое средство, которое помогает устранять неполадки Kerberos, связанные с проблемами подключения при использовании SQL Server. Дополнительные сведения см. в разделе Диспетчер конфигурации Microsoft Kerberos для SQL Server.

Дополнительные сведения о протоколе Kerberos см. в следующих статьях.

Использование

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

Сценарий Описание
Приложение прежней версии не указывает имя субъекта-службы. Этот сценарий совместимости гарантирует, что не будет изменений в работе приложений, разработанных для предыдущих версий SQL Server. Если имя участника-службы не указано, то приложение использует сформированные имена участников-служб и ничего не знает об используемом методе проверки подлинности.
Клиентское приложение, использующее текущую версию драйвера OLE DB для SQL Server, указывает имя субъекта-службы в строке подключения как учетную запись пользователя домена или компьютера, определяемое экземпляром имя субъекта-службы или определяемую пользователем строку. Ключевое слово ServerSPN можно использовать в строке поставщика, инициализации или соединения, для указания следующих значений.

Указать учетную запись, используемую экземпляром SQL Server для соединения. Этот параметр упрощает доступ к проверке подлинности Kerberos. Если имеется центр распространения ключей Kerberos (KDC) и указана верная учетная запись, то проверка подлинности Kerberos будет предпочтительнее, чем NTLM. KDC обычно размещается на том же компьютере, что и контроллер домена.

Указать имя субъекта-службы для поиска учетной записи службы для экземпляра SQL Server. Для каждого экземпляра SQL Server создаются два имени субъекта-службы по умолчанию, которые могут быть использованы для этой цели. Однако эти ключи не обязательно есть в Active Directory, поэтому в такой ситуации проверка подлинности Kerberos не гарантирована.

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

Ключевое слово FailoverPartnerSPN указывает имя партнера-службы для сервера-партнера по обеспечению отработки отказа. Ранг учетной записи и ключевые значения Active Directory те же, что и значения, которые можно указать для основного сервера.
Приложение OLE DB указывает имя партнера-службы как свойство инициализации источника данных для основного сервера или сервера-партнера по обеспечению отработки отказа. Свойство соединения SSPROP_INIT_SERVER_SPN в наборе свойств DBPROPSET_SQLSERVERDBINIT может быть использовано для указания имени участника-службы для соединения.

Свойство соединения SSPROP_INIT_FAILOVER_PARTNER_SPN в DBPROPSET_SQLSERVERDBINIT может быть использовано для указания имени партнера-службы для сервера-партнера по обеспечению отработки отказа.
Пользователь указывает имя партнера-службы для сервера или сервера-партнера по обеспечению отработки отказа в диалоговом окне Связь данных или Имя входа OLE DB. Имя участника-службы может быть указано в диалоговом окне Связь данных или Имя входа .
Приложение OLE DB определяет метод проверки подлинности, используемый при установлении соединения. Если соединение было установлено успешно, то приложение может запросить свойство соединения SSPROP_AUTHENTICATION_METHOD в наборе свойств DBPROPSET_SQLSERVERDATASOURCEINFO для определения метода проверки подлинности, который будет использоваться. В частности, получаемыми значениями могут быть NTLM и Kerberos.

Отработка отказа

Имена субъектов-служб не хранятся в кэше отработки отказа и поэтому не могут передаваться между соединениями. Имена участников-служб будут использоваться при всех попытках установления соединения с основным и резервным сервером при указании атрибутов или строки соединения.

Объединение подключений в пул

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

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

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

Работа сервера низкого уровня

Поведение нового соединения реализуется клиентом, поэтому оно не зависит от версии SQL Server.

Связанные серверы и делегирование

При создании связанных серверов параметр @provstr хранимой процедуры sp_addlinkedserver может быть использован для указания имени участника-службы сервера и партнера по обеспечению отработки отказа. У этого метода те же преимущества, что и при указании имен субъектов-служб в клиентских строках подключения, — установить подключения на основе проверки подлинности Kerberos проще и надежнее.

Делегирование со связанными серверами требует проверки подлинности Kerberos.

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

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

  • Безопасность. Раскрывает ли указанное имя субъекта-службы конфиденциальные сведения?

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

  • Удобство и прозрачность расположения. Каким образом повлияет на имена субъектов-служб приложения перемещение базы данных в другой экземпляр SQL Server? Это понятие относится как к основному серверу, так и его партнеру по обеспечению отработки отказа при зеркальном отображении базы данных. Если при смене сервера потребуется замена имен участников-служб, как это повлияет на приложения? Будут ли изменения управляемыми?

Указание имени участника-службы

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

Максимальная длина для имени участника-службы — 260 символов.

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

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

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

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

InstanceName — имя экземпляра SQL Server.
HOST/fqdn

HOST/MachineName
Имя участника-службы, сопоставляемое со встроенной учетной записью компьютера, зарегистрированной в Windows автоматически.
Username@Domain Прямое указание учетной записи домена.

Username — имя учетной записи пользователя Windows.

Domain — имя домена Windows или полное имя домена.
MachineName$@Domain Прямое указание учетной записи компьютера

(если сервер, с которым выполняется соединение, работает с учетными записями LOCAL SYSTEM или NETWORK SERVICE, то для проверки подлинности Kerberos ключевое слово ServerSPN можно указывать в формате MachineName$@Domain).
KDCKey/MachineName Заданное пользователем имя участника-службы.

KDCKey — алфавитно-цифровая строка, соответствующая правилам для ключей KDC.

Синтаксис OLE DB для поддержки имен субъектов-служб

Сведения о синтаксисе см. в следующих статьях.

См. также:

Возможности драйвера OLE DB для SQL Server
Регистрация имя участника-службы для соединений Kerberos