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

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

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

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

ПримечаниеПримечание

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

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

Сведения об использовании

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

Сценарии

Описание

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

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

  • Удобство и прозрачность расположения. Каким образом повлияет на имена участников-служб приложения перемещение базы данных на другой экземпляр 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.

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

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

Сведения об образцах приложений, которые демонстрируют эту функцию, см. в разделе Вопросы установки образцов кода и образцов баз данных SQL Server.