Поделиться через


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

Область применения: 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 см. в следующих статьях.

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

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

Сценарий Description
Приложение прежней версии не указывает имя субъекта-службы. Этот сценарий совместимости гарантирует отсутствие изменений поведения для приложений, разработанных для предыдущих версий 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 в 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.

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

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

См. также

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