Поддержка имени субъекта-службы (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