Поддержка имени субъекта-службы в клиентских соединениях
Область применения: SQL Server
Начиная с 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