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

Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Внимание

Собственный клиент SQL Server (часто сокращенный SNAC) был удален из SQL Server 2022 (16.x) и SQL Server Management Studio 19 (SSMS). Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений. Перейдите на новый драйвер Microsoft OLE DB (MSOLEDBSQL) для SQL Server или последний драйвер Microsoft ODBC для SQL Server . Сведения о 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