Поддержка имени субъекта-службы (SPN) в клиентских подключениях в собственном клиенте SQL Server

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

Внимание

SQL Server Native Client (SNAC) не поставляется с:

  • SQL Server 2022 (16.x) и более поздних версий
  • SQL Server Management Studio 19 и более поздних версий

Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений.

Для новых проектов используйте один из следующих драйверов:

Сведения о SQLNCLI, которые поставляется в качестве компонента SQL Server ядро СУБД (версии 2012–2019), см. в этом исключении жизненного цикла поддержки.

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

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

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

Примечание.

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

Совет

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

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

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

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

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

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

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

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

Ключевое слово FailoverPartnerSPN указывает имя партнера-службы для сервера-партнера по обеспечению отработки отказа. Ранг учетной записи и ключевые значения Active Directory те же, что и значения, которые можно указать для основного сервера.
Приложение ODBC указывает имя партнера-службы как атрибут соединения для основного сервера или сервера-партнера по обеспечению отработки отказа. Атрибут соединения SQL_COPT_SS_SERVER_SPN может быть использован для указания имени участника-службы для соединения с основным сервером.

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

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

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

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

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

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

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

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

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

Новое поведение подключения реализуется клиентом; Поэтому она не зависит от версии SQL Server.

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

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

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

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

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

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

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

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

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

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

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

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

Синтаксис Description
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.

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

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

См. также

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