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

При создании или изменении конечных точек 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 2005 должен связать имя участника службы (SPN) с учетной записью, под которой он выполняется, например с локальной системной учетной записью или учетной записью пользователя домена. Характерные особенности регистрации SPN экземпляром SQL Server 2005 определяются типом учетной записи службы, под которой он выполняется. Если SQL Server 2005 выполняется под локальной системной учетной записью, SPN должны регистрироваться под именем компьютера. Если SQL Server 2005 выполняется под учетной записью пользователя домена, SPN должны регистрироваться под учетной записью пользователя домена.

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

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

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

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

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

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

Замечания

  • Так же, как и Httpcfg.exe, программа SetSPN.exe доступна в и устанавливается вместе с Httpcfg.exe и другими средствами поддержки Windows. Дополнительные сведения см. в разделе Настройка драйвера протокола HTTP, работающего в режиме ядра (Http.sys).
  • Если экземпляр SQL Server 2005 выполняется не под локальной системной учетной записью, регистрацию имен SPN при помощи программы SetSPN.exe могут изменять только пользователи, которые прошли встроенную проверку подлинности и имеют разрешения DOMAIN ADMIN.
  • Если экземпляр SQL Server 2005 выполняется под локальной системной учетной записью, регистрацию имен SPN при помощи программы SetSPN.exe могут изменять только члены фиксированной серверной роли SQL Server sysadmin.
  • Если учетной записью службы является 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 зарегистрировано более одного раза.
    Существует несколько ситуаций, когда администратор может продублировать имена SPN в каталоге домена, что приведет к ошибке при проверке подлинности Kerberos:
    • Изменение учетной записи домена, под которой выполняется экземпляр SQL Server
      Если запустить программу SetSpn.exe, когда экземпляр SQL Server выполняется под одной учетной записью домена (например ДОМЕН\Пользователь1), а затем изменить учетную запись SQL Server (например DOMAIN\Пользователь2), когда SetSPN.exe запускается повторно, одно и тоже имя SPN будет вставлено в каталог для обеих учетных записей.
    • Установка нескольких экземпляров SQL Server, которые выполняются под разными учетными записями
      Если установить несколько экземпляров SQL Server, запустить каждый из них под различными учетными записями и выполнить программу SetSpn.exe для каждого экземпляра, в каталог будут вставлены одинаковые имена SPN для каждой учетной записи SQL Server. Это относится к экземплярам, которые выполняются и под учетной записью пользователя домена, и под локальной системной учетной записью.
    • Удаление и переустановка экземпляра SQL Server под другой учетной записью
      Если установить SQL Server под одной учетной записью, зарегистрировать имена SPN, удалить и переустановить SQL Server под другой учетной записью и снова зарегистрировать имена SPN, то каждая учетная запись домена будет иметь одинаковые имена SPN. Это означает, что имена SPN будут дублироваться.

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

См. также

Основные понятия

Настройка драйвера протокола HTTP, работающего в режиме ядра (Http.sys)

Справка и поддержка

Получение помощи по SQL Server 2005