Поделиться через


Как включить проверку подлинности Kerberos в отказоустойчивом кластере сервера

Изменения: 15 сентября 2007 г.

Kerberos - это сетевой протокол, позволяющий реализовать надежную проверку подлинности в клиентских и серверных приложениях. Он обеспечивает совместимость и в то же время повышает безопасность проверки подлинности в масштабе всей корпоративной сети.

Проверку подлинности Kerberos можно использовать с изолированными экземплярами Microsoft SQL Server 2005 и с экземплярами отказоустойчивого кластера, работающими под управлением ОС Microsoft Windows 2000 с пакетом обновления 3 (SP3). Поддержка этой функциональности обеспечивается в SQL Server 2005 при обычном развертывании домена Microsoft Windows 2000 Active Directory.

Если ресурс сетевого имени, от которого зависит SQL Server, относится к кластеру Windows 2000, можно использовать проверку подлинности Kerberos с этим ресурсом после установки пакета обновления 3 (SP3) для Windows 2000. Дополнительные сведения об активации проверки подлинности Kerberos в кластерах серверов см. в статье Kerberos Support on Windows 2000-based Server Clusters (поддержка Kerberos в кластерах серверов, работающих под управлением ОС Windows 2000), которую можно найти в базе знаний Майкрософт.

В следующем разделе описано, как подключиться к серверу, на котором работают службы IIS для установки соединения Kerberos с сервером, на котором выполняется SQL Server.

Предварительные требования

Использовать описываемую функциональность можно только при работе с ОС Windows 2000 с пакетом обновления 3 (SP3).

Перед установкой системы загрузите из Интернета программы Kerbtray и SetSPN.

  • Программу Kerbtray можно загрузить со следующего веб-узла корпорации Майкрософт. Используя программу Kerbtray.exe, можно с легкостью проверять и удалять билеты Kerberos с любых связанных компьютеров.
  • Программу SetSPN можно загрузить со следующего веб-узла Майкрософт.

SQL Server использует Kerberos лишь в том случае, если клиент использует для подключения к SQL Server протокол TCP/IP. Например, если клиент подключается с помощью протокола именованных каналов, Kerberos не используется. Если на компьютере установлено несколько экземпляров SQL Server, то для каждого из них необходимо настроить имя сервера-участника (Server Principal Name, SPN), поскольку каждый экземпляр SQL Server использует уникальный порт TCP/IP.

Включение Kerberos для SQL Server 2005

Подключение к серверу Microsoft Internet Information Services и установление соединения Kerberos с SQL Server 2005

  1. Шаг 1. Настройте контроллер домена

На контроллере домена в средстве «Active Directory — пользователи и компьютеры» выполните следующие действия.

  1. Щелкните правой кнопкой мыши компьютер, который нужно настроить для делегирования (сервер IIS), и выберите пункт «Этот компьютер доверенный для делегирования». Если компьютер, на котором выполняется SQL Server, является последним компьютером, с которым была установлена связь, но имеет связанный сервер, ему также должны быть предоставлены разрешения на делегирование. Если он не является последним компьютером в цепи, разрешения на делегирование должны быть предоставлены всем промежуточным компьютерам.
  2. Предоставьте разрешение на делегирование пользователю домена учетной записи службы SQL Server. При установке SQL Server в кластере необходима учетная запись пользователя домена (этот шаг не требуется, если компьютер выполняет SQL Server в контексте локальной системной учетной записи).
    1. В папке «Пользователи» щелкните правой кнопкой мыши учетную запись пользователя и выберите пункт Свойства.
    2. В диалоговом окне свойств учетной записи пользователя щелкните вкладку Учетная запись.
    3. В разделе Параметры учетной записи установите флажок Доверять учетной записи при делегировании. Убедитесь в том, что для данной учетной записи не установлен флажок Учетная запись конфиденциальна и не может быть делегирована.
  3. При помощи программы Kerbtray.exe проверьте билеты Kerberos, полученные от контроллера домена и узла:
    1. Щелкните правой кнопкой мыши значок Kerbtray в области уведомлений, затем выберите пункт очистить паспорта.
    2. Подождите, пока зеленый цвет значка Kerbtray сменится на желтый. Когда это произойдет, откройте окно командной строки и выполните следующую команду:
      net session* /d
      Это приведет к отмене существующих сеансов, созданию нового сеанса и получению билета Kerberos.

Шаг 2. Настройте сервер IIS

  1. Замените файлы веб-узла по умолчанию Wwwroot файлами-образцами ASP. Чтобы создать файлы-образцы ASP, используйте код, приведенный в разделе Тестовый сценарий ASP для получения данных SQL Server.
  2. Добавьте файл в папку Wwwroot. С этой целью используйте образец кода, приведенный в подразделе Тестовый сценарий ASP для получения данных SQL Server. Сохраните файл с именем Default.asp.
  3. Сконфигурируйте веб-сервер так, чтобы он использовал только встроенную проверку подлинности Windows:
    1. Щелкните правой кнопкой мыши веб-сервер по умолчанию и выберите папку Безопасность.
    2. В папке Безопасность внесите нужные изменения, после чего снимите параметр анонимный доступ.
    3. Выполните в командной строке следующую команду:
      cscript C:\Inetpub\Adminscripts\adsutil.vbs get w3svc/NTAuthenticationProviders
      Если параметр Согласование задан, возвращается следующий результат:
      NTAuthenticationProviders : (STRING) Negotiate,NTLM
      Дополнительные сведения о том, как настроить сервер IIS, чтобы он поддерживал проверку подлинности Kerberos и NTLM, см. в статье Как настроить сервер IIS, чтобы он поддерживал проверку подлинности Kerberos и NTLM, которую можно найти в базе знаний Майкрософт.
    ms189585.note(ru-ru,SQL.90).gifПримечание.
    На сервере IIS необходимо установить систему компонентов доступа к данным Microsoft (MDAC) 2.8 с пакетом обновления 1 (SP1) или более поздней версии. Чтобы сделать это (и получить возможность использовать соответствующие инструменты для тестирования), установите на веб-сервере клиентские средства Microsoft SQL Server 2000. Сведения о том, как установить только MDAC 2.8 с пакетом обновления 1 (SP1) или более поздней версии без клиентских средств, можно найти на следующем веб-узле Майкрософт.
  4. Убедитесь в том, что в реестре существует значение HKLM\SW\MS\MSSQLSERVER\Client\DSQUERY. Если этого значения нет, добавьте его в реестр в форме DSQUERY:Reg_SZ:DBNETLIB.
  5. При помощи программы Kerbtray.exe проверьте билеты Kerberos, полученные от контроллера домена и узла:
    1. Щелкните правой кнопкой мыши значок Kerbtray в области уведомлений, затем выберите пункт очистить паспорта.
    2. Подождите, пока зеленый цвет значка Kerbtray сменится на желтый. Когда это произойдет, откройте окно командной строки и выполните следующую команду:
      net session * /d
      Это приведет к отмене существующих сеансов, созданию нового сеанса и получению билета Kerberos.

Шаг 3. Создайте имя участника сервера для SQL Server

ms189585.Caution(ru-ru,SQL.90).gifВнимание!
SQL Server использует Kerberos лишь в том случае, если клиент использует для подключения к SQL Server протокол TCP/IP. Например, если клиент подключается с помощью протокола именованных каналов, Kerberos не используется. Если на компьютере установлено несколько экземпляров SQL Server, то для каждого из них необходимо настроить имя сервера-участника (Server Principal Name, SPN), поскольку каждый экземпляр SQL Server использует уникальный порт TCP/IP.
ms189585.note(ru-ru,SQL.90).gifВажно!
Если служба SQL Server выполняется в контексте учетной записи LocalSystem, конфигурировать SPN для SQL Server вручную не требуется. Имя SPN создается автоматически при запуске службы SQL Server. Если служба SQL Server выполняется в контексте учетной записи пользователя домена, настроить SPN нужно вручную. Выполните для этого действия, описанные ниже.

Чтобы настроить SPN для SQL Server, используйте программу SETSPN из пакета ресурсов Microsoft Windows Resource Kit. Ее можно загрузить со следующего веб-узла Майкрософт.

Перед запуском программы SETSPN примите во внимание следующую информацию.

  • Выполнять программу setspn.exe нужно в контексте учетной записи входа, имеющей разрешения на регистрацию SPN.
  • Обратите внимание на учетную запись пользователя домена, в контексте которой выполняется экземпляр SQL Server. В следующих примерах эта учетная запись называется <SQL_Service_Account>.
    Внимание! Если экземпляр SQL Server выполняется в контексте учетной записи LocalSystem, запускать программу SETSPN не нужно.
  • Нужно знать полностью определенное имя домена (FQDN) компьютера, на котором выполняется SQL Server. Чтобы определить это имя, используйте программу ping. Для этого выполните действия, описанные ниже.
  1. Определите при помощи программы ping IP-адрес компьютера, на котором выполняется SQL Server:
    C:\>ping MySQLServer
    Pinging MySQLServer.MyDomain.com [10.10.10.10] with 32 bytes of data:
    Reply from 10.10.10.10: bytes=32 time=1ms TTL=128
  2. Выполните команду ping -a для обратного уточняющего запроса IP-адреса, чтобы убедиться, что протокол DNS возвращает правильное имя FQDN:
    C:\>ping -a 10.10.10.10
    Pinging MySQLServer.MyDomain.com [10.10.10.10] with 32 bytes of data:
    Reply from 10.10.10.10: bytes=32 time<1ms TTL=128
  3. Выполните команду ping, указав имя экземпляра отказоустойчивого кластера для получения его IP-адреса, после чего выполните команду ping -a , чтобы убедиться, что протокол DNS возвращает правильное имя FQDN.
ms189585.note(ru-ru,SQL.90).gifПримечание.
При работе с отказоустойчивым кластером SQL Server, используйте полностью определенное имя домена экземпляра отказоустойчивого кластера. Обратите внимание на порт TCP/IP, используемый экземпляром SQL Server. Чтобы получить эти сведения, запустите на компьютере, выполняющем SQL Server, диспетчер конфигурации SQL Server, щелкните экземпляр SQL Server и просмотрите свойства протокола TCP/IP (порт по умолчанию).

Определив учетную запись пользователя домена, в контексте которой выполняется служба SQL Server, и порт TCP/IP, используемый экземпляром SQL Server, выполните следующие действия, чтобы создать SPN для SQL Server.

ms189585.note(ru-ru,SQL.90).gifПримечание.
Выполнять команду SETSPN могут только члены группы администраторов домена.
  1. Если имеется дело с отказоустойчивым кластером SQL Server, выполните следующую команду SETSPN:
    setspn -A MSSQLSvc/<FQDN> <SQL_Service_Account>
    Например, если кластеризованный экземпляр SQL Server 2005 с именем MySQLServer.MyDomain.com выполняется в контексте учетной записи пользователя домена SQLSVC, введите следующую команду:
    setspn -A MSSQLSvc/MySQLServer.MyDomain.com SQLSVC
  2. И для кластеризованных, и для некластеризованных компьютеров, на которых работает SQL Server, выполните следующую команду SETSPN, чтобы зарегистрировать имя SPN для порта, используемого компьютером, на котором выполняется SQL Server:
    setspn -A MSSQLSvc/<FQDN>:<Port> <SQL_Service_Account>
    Например, если экземпляр MySQLServer.MyDomain.com выполняется в контексте учетной записи пользователя домена SQLSVC и ассоциирован с портом 1433, введите следующую команду SETSPN:
    setspn -A MSSQLSvc/MySQLServer.MyDomain.com:1433 SQLSVC
  3. После регистрации имени SPN убедитесь в том, что оно зарегистрировано правильно, при помощи функции LIST (параметр -L) программы SETSPN. Выполните команду SETSPN -L <SQL_Service_Account> с целью получения всех имен SPN, зарегистрированных для учетной записи пользователя домена, в контексте которой работает экземпляр SQL Server:
    setspn -L <SQL_Service_Account>
    Например, если экземпляр MySQLServer.MyDomain.com выполняется в контексте учетной записи пользователя домена SQLSVC и использует порт 1433, введите следующую команду:
    setspn -A SQLSVC
    Имя SPN, созданное на шаге 1 (если SQL Server кластеризован) и 2 (если SQL Server не кластеризован), показано ниже:
    C:\>setspn -l SQLSVC
    Registered ServicePrincipalNames for CN=SQLSVC,CN=Users,DC=MyDomain,DC=com:
    MSSQLSvc/MySQLServer.MyDomain.com
    MSSQLSvc/MySQLServer.MyDomain.com:1433
ms189585.note(ru-ru,SQL.90).gifПримечание.
Если используется отказоустойчивый кластер SQL Server, необходимо зарегистрировать одно имя SPN без номера порта и еще одно с номером порта. Если SQL Server выполняется на типичном некластеризованном компьютере, нужно зарегистрировать только SPN с номером порта. Однако если дополнительное имя SPN без имени порта будет зарегистрировано, никаких проблем с некластеризованными компьютерами не возникнет.
ms189585.note(ru-ru,SQL.90).gifПримечание.
Кроме того, для проверки обоих зарегистрированных имен SPN можно использовать программу Ldifde.exe на контроллере домена. Этот подход описан в подразделе «Как собрать данные об именах серверов-участников Active Directory».

Шаг 4. Настройте клиентские компьютеры

  1. Убедитесь, что на каждом клиентском компьютере, который будет подключаться к серверу, Microsoft Internet Explorer настроен для использования проверки подлинности Windows.
  2. Запустите Internet Explorer и выберите в меню Сервис пункт Свойства обозревателя.
  3. Выберите вкладку Дополнительно.
    В категории Безопасность установите флажок Включить интегрированную проверку подлинности Windows (требуется перезапуск) и нажмите кнопку ОК.

Шаг 5. Протестируйте конфигурацию

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

  1. Войдите в систему и выполните программу Kerbtray.exe для проверки того, что компьютер может получить от контроллера домена правильный билет Kerberos.
  2. Удалите при помощи программы Kerbtray.exe на компьютере все билеты.
  3. Создайте веб-страницу, возвращающую данные SQL Server, и подключитесь к ней.
ms189585.note(ru-ru,SQL.90).gifПримечание.
Замените значение SQLSERVERNAME именем компьютера, на котором выполняется SQL Server.
  • Если данные возвращаются, то эта страница отображает тип проверки подлинности Согласование и данные SQL Server, сформированные в результате выполнения хранимой процедуры sp_helpdb, которая должна возвратить список баз данных на сервере, к которому клиент подключается через страницу ASP.
  • Если в экземпляре SQL Server активирован аудит, в журнале приложений соединение будет указано как надежное.

Тестовый сценарий ASP для получения данных SQL Server

Ниже приведен код тестового сценария ASP, служащего для получения данных SQL Server. Используя этот образец кода, не забудьте заменить значение SQLSERVERNAME именем компьютера, на котором выполняется SQL Server.

<%@ Language=VBScript %>

<HTML>

<HEAD>

<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

</HEAD>

<BODY>

<%="'auth_user' is" & request.servervariables("auth_user")%>

<P>

<%="'auth_type' is" & request.servervariables("auth_type")%>

<P>

Connections string is <B>" Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME </B>

<P>

<%

set rs = Server.CreateObject("ADODB.Recordset")

set cn = Server.CreateObject("ADODB.Connection")

cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME"

rs.open "MASTER..sp_helpdb",cn

Response.Write cstr(rs.Fields.Count) +"<BR>"

while not rs.EOF

Response.Write cstr(rs(0))+"<BR>"

rs.MoveNext

wend

rs.Close

cn.Close

set rs = nothing ' Frees memory reserved by the recordset.

set cn = nothing ' Frees memory reserved by the connection.

%>

</BODY>

</HTML>

Сбор данных об именах серверов-участников Active Directory

Чтобы получить список имен серверов-участников Active Directory, выполните на одном из контроллеров домена следующую команду, где betaland — имя домена NetBIOS, а NewoutputUsers.txt — имя выходного файла, которым можно воспользоваться для переноса результатов. Если не используется полный путь, файл помещается в папку, в которой была выполнена команда. Следующая команда опрашивает весь домен:

ldifde -d "CN=Users,DC=betaland" -l servicePrincipalName -F NewoutputUsers.txt

Эта команда создает файл NewoutputUsers.txt с данными, похожими на вывод, приведенный в подразделе «Данные уровня домена, выводимые в файл NewouputUsers.txt».

Если собрать эти данные для всего домена, их объем может оказаться слишком большим. Чтобы ограничить объем собираемых данных конкретным именем пользователя, выполните следующую команду, где User Name — имя пользователя, а betaland — домен, который запрошен:

ldifde -d "CN=User Name,DC=betaland" -l servicePrincipalName -F NewoutputUsers.txt

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

  • Записи серверов, которые уже не существуют, но не были полностью удалены из системы Active Directory.
  • Запись пользователя «User Name», который владеет корректными сведениями об именах SPN примерно на десяти разных серверах.

Для исправления некорректных записей Active Directory можно использовать инструмент интерфейсов ADSI.

Внимание! Если, используя оснастку ADSI Edit, программу LDP или какое-либо другое клиентское приложение LDAP версии 3, неправильно изменить атрибуты объектов Active Directory, это может привести к серьезным проблемам. Эти проблемы могут потребовать переустановки Microsoft Windows 2000 Server, Microsoft Exchange 2000 Server или обеих систем. Корпорация Майкрософт не гарантирует, что проблемы, возникшие в результате неправильного изменения атрибутов объектов Active Directory, удастся решить. Пользователь несет полную ответственность за последствия, вызванные изменением этих атрибутов.

Сведения уровня домена, выводимая в файл NewouputUsers.txt:

dn: CN=User Name,CN=Users,DC=betaland

changetype: add

servicePrincipalName: MSSQLSvc/CLUSTERDEFAULT.betaland:1257

servicePrincipalName: MSSQLSvc/INST3.betaland:3616

servicePrincipalName: MSSQLSvc/INST2.betaland:3490

servicePrincipalName: MSSQLSvc/SQLMAN.betaland:1433

servicePrincipalName: MSSQLSvc/VSS1.betaland:1433

servicePrincipalName: MSSQLSvc/INST1.betaland:2536

servicePrincipalName: MSSQLSvc/INST4.betaland:3967

servicePrincipalName: MSSQLSvc/SQLVIRTUAL1.betaland:1434

servicePrincipalName: MSSQLSvc/SQLVIRTUAL.betaland:1433

servicePrincipalName: MSSQLSvc/SQLBUSTER.betaland:1315

См. также

Другие ресурсы

Разделы руководства по конфигурированию доступности
Установка SQL Server 2005
Обновление до SQL Server 2005

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

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