Исправление: Появляется сообщение об ошибке «Cannot generate SSPI context» при попытке подключения к серверу SQL Server 2000 SP3


Обзор


При попытке подключиться к серверу Microsoft SQL Server 2000 Пакет обновления 3 (SP3) на клиентском компьютере, установить подключение не удастся с сообщением об ошибке, если имя сервера не удается разрешить адрес Internet Protocol (IP). Это происходит потому, что SQLOLEDB неправильно интерпретирует значение, возвращаемое функцией ConnectionGetSvrUser dbnetlib.
  • Данное исправление устраняет эту проблему.
  • Чтобы обойти эту проблему, вручную создайте запись узла для IP-адреса на клиентском компьютере.
  • Чтобы воспроизвести проблему, создать и настроить динамический IP-адрес компьютера с сервером и подключитесь к компьютеру с сервером с помощью анализатора запросов SQL или средство просмотра наборов строк с клиентского компьютера.

Симптомы


При попытке подключения клиентского компьютера к серверу Microsoft SQL Server 2000 SP3, имя сервера не удается разрешить адрес Internet Protocol (IP) и установить подключение не удастся.

При подключении к компьютеру сервера SQL Server 2000 SP3 с SQL Query Analyzer, появляется следующее сообщение об ошибке:
Сервер: Сообщение 11004, уровень 16, состояние 1
[Microsoft] [Драйвер ODBC SQL Server] Не удается создать контекст SSPI
При использовании SQL Server OLE DB поставщика (SQLOLEDB) для подключения к серверу SQL Server 2000 с помощью средства просмотра набора строк, появляется следующее сообщение об ошибке:
Источник: «поставщик Microsoft OLE DB для SQL Server»

Интерфейс: IID_IDBInitialize
Результат: 0x80004005 = значение E_FAIL

ISQLErrorInfo: [HY000] [0x00002afc]
IErrorInfo: [0x00002afc] «Cannot generate SSPI context»

Файл: D:\MDACTools\rowsetviewer\CBase.cpp
Строки: 1067

Причина


Когда SQLOLEDB вызывает функцию ConnectionGetSvrUser в библиотеке dbnetlib, неверной интерпретации, эта функция возвращает значение типа Boolean. Функция ConnectionGetSvrUser позволяет возвращать значение void. Таким образом все, что находится в регистре EAX становится возвращаемое значение.


Функция ConnectionGetSvrUser внутренне вызывает функцию gethostbyaddr . Функция gethostbyaddr возвращает имя узла, соответствующий определенному IP-адресу. Если gethostbyaddr функция завершается с ошибкой, он возвращает нулевой символ регистра EAX. Таким образом функция ConnectionGetSvrUser возвращает значение FALSE . Это приводит к возникновению ошибки входа в систему на компьютере сервера SQL Server 2000 SP3.


Решение


Существует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, описанной в этой статье. Применяйте данное исправление только в тех системах, которые имеют данную проблему.

Если исправление доступно для скачивания, имеется раздел "Пакет исправлений доступен для скачивания" в верхней части этой статьи базы знаний. Если этого раздела нет, отправьте запрос в службу технической поддержки для получения исправления.

Примечание. Если наблюдаются другие проблемы или необходимо устранить неполадки, вам может понадобиться создать отдельный запрос на обслуживание. Стандартная оплата за поддержку будет взиматься только за дополнительные вопросы и проблемы, которые не соответствуют требованиям конкретного исправления. Полный список телефонов поддержки и обслуживания клиентов корпорации Майкрософт или создать отдельный запрос на обслуживание посетите следующий веб-узел корпорации Майкрософт:Примечание. В форме "Пакет исправлений доступен для скачивания" отображаются языки, для которых доступно исправление. Если нужный язык не отображается, значит исправление для данного языка отсутствует. Английская версия данного исправления содержит атрибуты файла (или более поздней версии), приведенные в следующей таблице. Дата и время для этих файлов указаны в формате общего скоординированного времени (UTC). При просмотре сведений о файле, он преобразуется в локальное время. Чтобы узнать разницу между временем по Гринвичу и местным временем, воспользуйтесь вкладкой часовой пояс «Дата и время» панели управления.
  Date         Time   Version            Size    File name
--------------------------------------------------------------

15-Jun-2004 00:22 2000.85.1045.0 28,672 Dbnmpntw.dll
15-Jun-2004 00:21 2.80.1045.0 147,456 Msadds.dll
15-Jun-2004 00:21 2.80.1045.0 512,000 Msado15.dll
15-Jun-2004 00:21 2.80.1045.0 163,840 Msadomd.dll
15-Jun-2004 00:21 2.80.1045.0 184,320 Msadox.dll
15-Jun-2004 00:21 2.80.1045.0 53,248 Msadrh15.dll
15-Jun-2004 00:21 2.80.1045.0 225,280 Msdaora.dll
15-Jun-2004 00:21 2.80.1045.0 147,456 Msdart.dll
15-Jun-2004 00:21 2.575.1045.0 139,264 Msorcl32.dll
15-Jun-2004 00:21 3.525.1045.0 221,184 Odbc32.dll
15-Jun-2004 00:22 2000.85.1045.0 24,576 Odbcbcp.dll
15-Jun-2004 00:21 2.80.1045.0 442,368 Oledb32.dll
15-Jun-2004 00:21 2000.85.1045.0 503,808 Sqloledb.dll
15-Jun-2004 00:21 2000.85.1045.0 401,408 Sqlsrv32.dll
15-Jun-2004 00:08 2000.85.1045.0 208,896 Sqlxmlx.dll


Временное решение


Чтобы обойти эту проблему, вручную создайте запись узла на клиентском компьютере для IP-адреса, необходимо установить соединение.
  1. Запустите Windows Explorer.
  2. Найдите файл Hosts, а затем откройте файл в блокноте.

    Примечание. Файл можно найти в каталоге %SystemRoot%\System32\Drivers\Etc.
  3. Добавьте в конец файла следующий:
    Случайные IP Имя компьютера

    Примечание. Случайные IP — это IP-адрес не используется другим компьютером в сети. Имя компьютера — это имя компьютера с SQL Server 2000 SP3, работающих на нем. Случайные IP-адрес и имя Компьютера должны быть разделены хотя бы одним пробелом.
  4. В меню Файл нажмите кнопку Сохранить.
  5. Закройте файл.

Статус


Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".

Дополнительные сведения


Действия по воспроизведению проблемы

Настройка динамического IP-адреса

  1. Войдите в систему с правами администратора на компьютер, на котором запущен SQL Server 2000 SP3.
  2. На панели управления дважды щелкните значок Сетевые подключения.
  3. Дважды щелкните подключение, которое требуется изменить.
  4. В диалоговом окне Состояние подключения по локальной сети нажмите кнопку Свойства. Откроется диалоговое окно Свойств подключения локальной сети .
  5. В списке Отмеченные компоненты используются этим подключением выберите пункт Протокол Интернета (TCP/IP)и нажмите кнопку Свойства. Откроется диалоговое окно Свойства протокола Интернета (TCP/IP) .
  6. Щелкните получить IP-адрес автоматическии нажмите кнопку ОК.
  7. Нажмите кнопку Закрытьв диалоговом окне Свойств подключения локальной сети .

  8. В диалоговом окне Состояние подключения по локальной сети нажмите кнопку Закрыть.
  9. Нажмите кнопку Пуск, выберите пункт Выполнить, введите cmd и нажмите кнопку ОК.
  10. В командной строке введите ping Имя компьютераи нажмите клавишу ВВОД.

    Примечание. Имя компьютера — это имя компьютера, на котором выполняется SQL Server 2003

    Появляется сообщение об ошибке, подобное приведенному ниже:
    Обмен пакетами Имя компьютера [Динамического IP] по 32 байт:

    Ответ от Динамического IP: байт = 32 время < 1 мс TTL = 128
    Ответ от Динамического IP: байт = 32 время < 1 мс TTL = 128
    Ответ от Динамического IP: байт = 32 время < 1 мс TTL = 128

    Статистика Ping для Динамического IP:
    Пакетов: Отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
    Приблизительное время передачи и приема:
    Минимальное = 0мс, наибольшее = 0мс, среднее = 0 мс
    Примечание. Динамический IP-адрес — местозаполнитель для динамического IP-адреса компьютера Имя компьютера .
  11. Чтобы выйти из командной строки, введите команду exitи нажмите клавишу ВВОД.
  12. Повторите шаги c – e. щелкните использовать следующий IP-адрес.
  13. Введите Динамический IP- адрес в поле IP-адрес .

    Примечание. Динамический IP-адрес — местозаполнитель для динамического IP-адреса компьютера Имя компьютера .
  14. В поле Маска подсети введите маску подсети для сети.
  15. В поле « основной шлюз » введите IP-адрес компьютера или устройства сети, которое подключается к сети к другой сети или к Интернету.
  16. В поле Предпочитаемый DNS-сервер введите IP-адрес компьютера, который разрешает имена узлов в IP-адреса.
  17. В поле Альтернативный DNS-сервер введите IP-адрес DNS-сервера, который необходимо использовать, если предпочитаемый сервер DNS (Domain Name System) недоступен.
  18. Нажмите кнопку Дополнительно. Отображаются Дополнительные параметры TCP/IP .
  19. В списке IP-адресовнажмите кнопку Добавить. Появится диалоговое окно Адрес TCP/IP .
  20. Введите Произвольный IP- адрес в поле IP-адрес .

    Примечание. Случайные IP — это IP-адрес не используется другим компьютером в сети.
  21. В поле Маска подсети введите маску подсети для сети и нажмите кнопку Добавить.
  22. В окне Дополнительные параметры TCP/IPнажмите кнопку ОК.
  23. В окне Свойства протокола Интернета (TCP/IP) нажмите кнопку OK. Нажмите кнопку Закрытьв диалоговом окне Свойств подключения локальной сети . В диалоговом окне Состояние подключения по локальной сети нажмите кнопку Закрыть.

Подключиться к компьютеру с сервером SQL Server 2000 SP3 с клиентского компьютера с помощью анализатора запросов SQL

  1. Запуск анализатора запросов SQL. Появится диалоговое окно подключение к SQL Server .
  2. В SQL Server введите Произвольный IP.

    Примечание. Случайные IP — это IP-адрес не используется другим компьютером в сети.
  3. В списке подключаться черезвыберите проверку подлинности Windows.
  4. Нажмите кнопку ОК. Можно заметить сообщение об ошибке, описанное в разделе «Проблема».

Подключение к компьютеру с сервером SQL Server 2000 SP3 на клиентском компьютере через средство просмотра наборов строк

  1. Чтобы открыть набор строк. Откроется окно Microsoft OLE DB RowsetViewer .
  2. В меню файл нажмите кнопку Полного подключения. Появится диалоговое окно Полного подключения - нет описания доступных .
  3. В списке Поставщик выберите пункт SQLOLEDB подключения.
  4. В поле источник данных введите Произвольный IP в группе источник.

    Примечание. Случайные IP — это IP-адрес не используется другим компьютером в сети.
  5. В разделе имя входащелкните DBPROMPT_NOPROMPT в списке подсказок .
  6. На вкладке « Свойства » нажмите кнопку Дополнительно. Появится диалоговое окно IDBProperties::SetProperties .
  7. Установите флажок « DBPROP_AUTH_INTEGRATED » и нажмите кнопку ОК.
  8. В диалоговом окне Полный Connect - нет описания доступных нажмите кнопку ОК. Можно заметить сообщение об ошибке, описанное в разделе «Проблема».
Примечание. Клиентский компьютер и компьютер сервера SQL Server 2000 с пакетом обновления 3 должны быть в том же домене. При попытке подключиться к компьютеру сервера SQL Server 2000 SP3 с Случайные IP с одного компьютера, он подключается к компьютеру с сервером SQL Server 2000 SP3 без ошибок.

Ссылки


Для получения дополнительных сведений посетите следующие веб-сайты Microsoft Developer Network (MSDN):
Общие сведения о средствах тестирования OLE DB
http://msdn2.microsoft.com/en-us/library/ms721219.aspx
Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:

Как изменить IP-адрес сетевого адаптера в Windows Server 2003 323444

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:

Описание 824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт