Регистрация имен участников службы Kerberos в файле Http.sys

Собственные веб-службы с поддержкой XML устарели. В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.

При создании или изменении конечных точек HTTP при помощи инструкций CREATE ENDPOINT или ALTER ENDPOINT необходимо указать тип проверки подлинности пользователей, посылающих конечной точке запросы HTTP SOAP. Дополнительные сведения см. в разделах CREATE ENDPOINT (Transact-SQL) и ALTER ENDPOINT (Transact-SQL).

Используя инструкции CREATE ENDPOINT и ALTER ENDPOINT, можно настроить поддержку проверки подлинности Kerberos следующими способами:

  • Если задан параметр AUTHENTICATION=KERBEROS, Kerberos является единственным средством проверки подлинности HTTP.

  • Если задан параметр AUTHENTICATION=INTEGRATED, для проверки подлинности HTTP конечной точки можно использовать следующие типы проверок подлинности: NEGOTIATE, KERBEROS и NTLM. Если задан параметр NEGOTIATE, клиент и сервер пытаются проверить подлинность при помощи протокола Kerberos. Если клиент не поддерживает протокол Kerberos или переговоры невозможны, для проверки подлинности снова используется NTLM. Чтобы клиент не переходил обратно на NTLM при использовании NEGOTIATE, рекомендуется установить для клиента параметр AUTHENTICATION=KERBEROS на конечной точке.

Чтобы поддерживать обоюдную проверку подлинности Kerberos, экземпляр SQL Server должен связать имя участника-службы (SPN) с учетной записью, от имени которой он будет выполняться, например с локальной системной учетной записью или учетной записью пользователя домена. Характерные особенности регистрации имени участника-службы экземпляром SQL Server определяются типом учетной записи службы, под которой он выполняется. Если SQL Server выполняется под локальной системной учетной записью, имена частников-служб должны регистрироваться под именем компьютера. Если SQL Server выполняется под учетной записью пользователя домена, имена участников-служб должны регистрироваться под учетной записью пользователя домена.

Работа с программой SetSPN.exe

Чтобы связать имя участника-службы с учетной записью, от имени которой выполняется экземпляр SQL Server, используйте средство поддержки Windows SetSPN.exe. Это средство добавляет имена участников-служб для имени компьютера, на котором выполняется экземпляр SQL Server под учетной записью пользователя домена Windows, которая хранится в Active Directory. В этом сценарии с помощью программы SetSPN.exe можно добавить два имени SPN: одно для имени NetBIOS, а другое для полного имени участника-службы.

Например, если выполнить программу SetSPN.exe из экземпляра SQL Server, запущенного на MyComputer, с учетной записью, под которой выполняется экземпляр SQL Server, будут связаны два имени участника-службы, которые должны быть добавлены в каталог:

HTTP/MyComputer;
HTTP/MyComputer.fully.qualified.domain.name.com

Обратите внимание, что одна учетная запись может иметь несколько имен участников-служб, однако каждое из них можно зарегистрировать только для одной учетной записи.

Для удаления обоих имен участников-служб (имя NetBIOS и полное имя DNS) также применяется программа SetSPN.exe.

Замечания

  • Так же, как и Httpcfg.exe, программа SetSPN.exe доступна в Windows Server 2003 и устанавливается вместе с Httpcfg.exe и другими средствами поддержки Windows. Дополнительные сведения см. в разделе Настройка драйвера протокола HTTP, работающего в режиме ядра (Http.sys).

  • Если экземпляр SQL Server выполняется не под локальной системной учетной записью, регистрацию имен SPN при помощи программы SetSPN.exe могут изменять только пользователи, которые прошли встроенную проверку подлинности и имеют права доступа DOMAIN ADMIN.

  • Если экземпляр SQL Server выполняется под локальной системной учетной записью, регистрацию имен SPN при помощи программы SetSPN.exe могут изменять только члены предопределенной роли сервера SQL Serversysadmin.

  • Если учетной записью службы является Local System, имена SPN можно добавить, используя учетную запись Active Directory компьютера, не запуская программу SetSPN.exe.

Синтаксис программы SetSPN.exe

Ниже перечислены параметры программы SetSPN.exe:

setspn { -ASPN | -DSPN | -L } service_account

Аргументы

  • -A
    Добавляет указанное имя SPN к учетной записи.

  • -D
    Удаляет указанное имя SPN из учетной записи.

  • -L
    Возвращает список всех имен SPN, зарегистрированных для учетной записи.

Примеры

Если экземпляр SQL Server выполняется под учетной записью пользователя домена (MyDomain\MySQLAccount) на компьютере MySQLHost, для настройки имен SPN можно использовать следующие команды:

setspn –A http/MySQLHost MyDomain\MySQLAccount
setspn –A http/MySqlHost.Mydomain.Mycorp.com MyDomain\MySQLAccount

Обратите внимание, что одна учетная запись может иметь несколько имен SPN (по одному для каждого имени узла или службы), однако каждое SPN можно зарегистрировать только для одной учетной записи. Если для нескольких учетных записей зарегистрировано одно и тоже имя SPN, проверка подлинности Kerberos закончится неудачно.

Например, для учетной записи MyDomain\MySQLAccount могут быть зарегистрированы следующие имена SPN. Первые две команды регистрируют имена для двух разных служб (http и rpc). Последняя — для другого имени узла, предполагая, что компьютер имеет несколько имен узлов.

setspn –A http/MySQLHost MyDomain\MySQLAccount
setspn –A rpc/MySQLHost MyDomain\MySQLAccount
setspn –A http/MySecondHost MyDomain\MySQLAccount

Следующие команды приведут к неудачному выполнению проверки подлинности Kerberos:

setspn –A http/MySQLHost MyDomain\MySQLAccountOne
setspn –A http/MySQLHost MyDomain\MySQLAccountTwo

Ошибка связана с тем, что на компьютере запущено два экземпляра SQL Server под разными учетными записями служб (MySQLAccountOne и MySQLAccountTwo). Регистрация двух имен SPN, по одному для каждого экземпляра SQL Server, не поддерживается.

Это является следствием того, что на одном компьютере запущены два экземпляра SQL Server под разными учетными записями. Имя SPN можно зарегистрировать для одной учетной записи. Если требуется несколько экземпляров SQL Server (например Inst1 и Inst2), работающих совместно с другими приложениями (например IIS), и нужно использовать проверку подлинности HTTP Kerberos для всех служб, используйте следующие параметры, чтобы решить конфликты при регистрации SPN:

  • Запускайте все экземпляры и приложения под одной учетной записью.

    Например, Inst1, Inst2 и IIS могут выполняться под учетной записью LocalSystem или Mydomain\MyServiceAccount.

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

    • Создать на компьютере три различных имени узла.

    • Назначить их разным приложениям.

    • Зарегистрировать три имени SPN для каждой пары «имя узла-приложения».

Устранение неполадок, связанных с регистрацией имен SPN для протокола Kerberos

Ниже перечислены наиболее распространенные проблемы, связанные с регистрацией имен SPN для протокола Kerberos.

  • Имя SPN не зарегистрировано.

    Если имя SPN не зарегистрировано, проверка подлинности Kerberos будет работать на локальном компьютере, на котором выполняется экземпляр SQL Server, но не будет пройдена на удаленных компьютерах клиентов.

  • Имя SPN зарегистрировано более одного раза.

    Существует несколько ситуаций, когда администратор может повторить имена участников-служб в каталоге домена, что приведет к ошибке при проверке подлинности Kerberos. Эти отчеты включают следующие сведения.

    • Изменение учетной записи домена, под которой выполняется экземпляр SQL Server

      Если запустить программу SetSpn.exe, когда экземпляр SQL Server выполняется под одной учетной записью домена (например ДОМЕН\Пользователь1), а затем изменить учетную запись SQL Server (например DOMAIN\Пользователь2), когда SetSPN.exe запускается повторно, одно и тоже имя участника-службы будет вставлено в каталог для обеих учетных записей.

    • Установка нескольких экземпляров SQL Server, которые выполняются под разными учетными записями

      Если установить несколько экземпляров SQL Server, запустить каждый из них под различными учетными записями и выполнить программу SetSpn.exe для каждого экземпляра, в каталог будут вставлены одинаковые имена SPN для каждой учетной записи SQL Server. Это относится к экземплярам, которые выполняются и под учетной записью пользователя домена, и под локальной системной учетной записью.

    • Удаление и переустановка экземпляра SQL Server под другой учетной записью

      Если установить SQL Server под одной учетной записью, зарегистрировать имена SPN, удалить и переустановить SQL Server под другой учетной записью и снова зарегистрировать имена SPN, то каждая учетная запись домена будет иметь одинаковые имена SPN. Это означает, что имена SPN будут дублироваться.

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