Регистрация имен участников службы Kerberos в файле Http.sys
В будущей версии 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 2005 или SQL Server 2008 должен связать имя участника службы (SPN) с учетной записью, под которой он выполняется, например с локальной системной учетной записью или учетной записью пользователя домена. Характерные особенности регистрации SPN экземпляром SQL Server определяются типом учетной записи службы, под которой он выполняется. Если SQL Server выполняется под локальной системной учетной записью, SPN должны регистрироваться под именем компьютера. Если SQL Server выполняется под учетной записью пользователя домена, SPN должны регистрироваться под учетной записью пользователя домена.
Работа с программой SetSPN.exe
Чтобы связать имя SPN с учетной записью, под которой выполняется экземпляр SQL Server 2005 или SQL Server 2008, используйте программу Windows SetSPN.exe. Эта программа добавляет имена SPN для имени компьютера, на котором выполняется экземпляр SQL Server под учетной записью пользователя домена Windows, которая хранится в Active Directory. В этом сценарии с помощью программы SetSPN.exe можно добавить два имени SPN: одно для имени NetBIOS, а другое для полного имени DNS.
Например, если выполнить программу SetSPN.exe из экземпляра SQL Server, запущенного на MyComputer, с учетной записью, под которой выполняется экземпляр SQL Server, будут связаны два имени SPN, которые должны быть добавлены в каталог:
HTTP/MyComputer;HTTP/MyComputer.fully.qualified.domain.name.com
Обратите внимание, что одна учетная запись может иметь несколько имен SPN, однако каждое SPN можно зарегистрировать только для одной учетной записи.
Для удаления обоих имен SPN (имя 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\MySQLAccountsetspn –A http/MySqlHost.Mydomain.Mycorp.com MyDomain\MySQLAccount
Обратите внимание, что одна учетная запись может иметь несколько имен SPN (по одному для каждого имени узла или службы), однако каждое SPN можно зарегистрировать только для одной учетной записи. Если для нескольких учетных записей зарегистрировано одно и тоже имя SPN, проверка подлинности Kerberos закончится неудачно.
Например, для учетной записи MyDomain\MySQLAccount могут быть зарегистрированы следующие имена SPN. Первые две команды регистрируют имена для двух разных служб (http и rpc). Последняя — для другого имени узла, предполагая, что компьютер имеет несколько имен узлов.
setspn –A http/MySQLHost MyDomain\MySQLAccountsetspn –A rpc/MySQLHost MyDomain\MySQLAccountsetspn –A http/MySecondHost MyDomain\MySQLAccount
Следующие команды приведут к неудачному выполнению проверки подлинности Kerberos:
setspn –A http/MySQLHost MyDomain\MySQLAccountOnesetspn –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 и удаления их вручную.