Poprawka: Otrzymujesz komunikat o błędzie "Nie można wygenerować kontekstu SSPI" podczas próby nawiązywania połączenia z komputerem serwera SQL Server 2000 z dodatkiem SP3

Streszczenie

Podczas próby nawiązania połączenia z komputerem serwera Microsoft SQL Server 2000 z dodatkiem Service Pack 3 (SP3) z komputera klienckiego, nie można nawiązać połączenia z komunikatem o błędzie, jeśli nie można rozpoznać nazwy serwera z adresu Internet Protocol (IP). To zachowanie występuje, ponieważ SQLOLEDB nieprawidłowo interpretuje wartość zwracaną przez funkcję ConnectionGetSvrUser dbnetlib.

  • Poprawka rozwiązuje ten problem.

  • Aby obejść ten problem, należy ręcznie utworzyć wpis hosta dla adresu IP na komputerze klienckim.

  • Aby odtworzyć problemu, tworzenie i konfigurowanie dynamicznego adresu IP komputera serwera i następnie połączyć się z komputerem serwera przy użyciu programu SQL Query Analyzer lub zestaw wierszy Viewer z komputera klienckiego.

Objawy

Podczas próby połączenia komputer kliencki do komputera serwera Microsoft SQL Server 2000 z dodatkiem SP3, nie można rozpoznać nazwy serwera z adresu Internet Protocol (IP), a nie można nawiązać połączenia.

Po podłączeniu do komputera serwera SQL Server 2000 z dodatkiem SP3 z programu SQL Query Analyzer, pojawi się następujący komunikat o błędzie:

Serwer: Msg 11004, poziom: 16, stan: 1
[Microsoft] [Sterownik ODBC SQL Server] Nie można wygenerować kontekstu SSPI

Gdy używasz SQL Server OLE DB Provider (SQLOLEDB) aby połączyć się z komputerem serwera SQL Server 2000 przy użyciu przeglądarki zestaw wierszy, pojawi się następujący komunikat o błędzie:

Źródło: "Microsoft OLE DB Provider for SQL Server"

Interfejs: IID_IDBInitialize
Wynik: 0x80004005 = E_FAIL

ISQLErrorInfo: [HY000] [0x00002afc]
IErrorInfo: [0x00002afc] "nie można wygenerować kontekstu SSPI"

Plik: D:\MDACTools\rowsetviewer\CBase.cpp
Wiersz: 1067

Przyczyna

Gdy SQLOLEDB wywołuje funkcję ConnectionGetSvrUser biblioteki dbnetlib, nieprawidłowo interpretuje że ta funkcja zwraca wartość logiczną. Funkcja ConnectionGetSvrUser jest przeznaczona do zwracania void. W związku z tym co znajduje się w rejestrze EAX staje się wartością zwróconą.


Funkcja ConnectionGetSvrUser wewnętrznie wywołuje funkcję gethostbyaddr . Funkcja gethostbyaddr uzyskuje nazwę hosta, która odnosi się do określonego adresu IP. Niepowodzenie funkcji gethostbyaddr zwraca zero znaków do rejestru EAX. W związku z tym funkcja ConnectionGetSvrUser zwraca wartość FALSE . To zachowanie powoduje niepowodzenie logowania do serwera SQL Server 2000 z dodatkiem SP3.


Rozwiązanie

Obsługiwana poprawka jest udostępniana przez firmę Microsoft. Jednak ta poprawka jest przeznaczona tylko do usunięcia problemu opisanego w tym artykule. Tylko w systemach, których dotyczy ten problem, należy zastosować tę poprawkę.

Jeśli poprawka jest dostępna do pobrania, pojawi się sekcja "Poprawka dostępna do pobrania" na początku tego artykułu z bazy wiedzy Knowledge Base. Jeśli nie ma tej sekcji, należy przesłać żądanie do centrum obsługi klienta firmy Microsoft i obsługi technicznej w celu uzyskania poprawki.

Uwaga Jeśli wystąpią dodatkowe błędy lub konieczność rozwiązania problemu, być może trzeba będzie utworzyć osobne zlecenie usługi. Zwykłe koszty obsługi będą zastosowane do dodatkowych pytań i problemów, których nie można rozwiązać przy użyciu określonej poprawki. Aby uzyskać pełną listę numerów telefonów działu obsługi klienta firmy Microsoft lub utworzyć osobne zlecenie usługi odwiedź następującą witrynę firmy Microsoft w sieci Web:

http://support.microsoft.com/contactus/?ws=supportUwaga "Poprawka dostępna do pobrania" zawiera listę języków, dla których dostępna jest poprawka. Jeśli odpowiedni język nie jest widoczny, to dlatego, że poprawka nie jest dostępna dla danego języka. Angielska wersja anglojęzyczna tej poprawki ma atrybuty plików (lub nowsze) wymienione w poniższej tabeli. Daty i godziny odpowiadające tym plikom są wymienione w skoordynowanego czasu uniwersalnego (UTC). Po wyświetleniu informacji o pliku są konwertowane na czas lokalny. Aby zobaczyć różnicę między czasem UTC i czasem lokalnym, należy użyć z karty Strefa czasowa w narzędziu Data i godzina w Panelu sterowania.

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

Obejście problemu

Aby obejść ten problem, należy ręcznie utworzyć wpis hosta na komputerze klienckim, aby adres IP, który chcesz się połączyć.

  1. Uruchom Eksploratora Windows.

  2. Zlokalizuj plik Hosts, a następnie otwórz plik w programie Notatnik.

    Uwaga: Można znaleźć plik w ścieżce %SystemRoot%\System32\Drivers\Etc.

  3. Dodaj następujące na końcu pliku:
    Losowe IPNazwy komputera

    Uwaga: Losowe IP jest symbolem zastępczym dla adresu IP, który nie jest używany przez inny komputer w sieci. Nazwa komputera jest symbolem zastępczym dla nazwy komputera, który ma SQL Server 2000 SP3 uruchomione na nim. Losowe IP adres IP i nazwę Nazwy komputera muszą być oddzielone co najmniej jedną spacją.

  4. W menu plik kliknij polecenie Zapisz.

  5. Zamknij plik.

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.

Więcej informacji

Kroki prowadzące do odtworzenia problemu

Konfiguracja dynamicznego adresu IP

  1. Zaloguj się jako administrator do komputera, na którym jest uruchomiony program SQL Server 2000 z dodatkiem SP3.

  2. W Panelu sterowania kliknij dwukrotnie ikonę Połączenia sieciowe.

  3. Kliknij dwukrotnie połączenie sieci lokalnej, który chcesz zmodyfikować.

  4. W oknie dialogowym Stan: połączenie lokalne kliknij polecenie Właściwości. Zostanie wyświetlone okno dialogowe Właściwości połączenia lokalnego .

  5. W polu to połączenie wykorzystuje następujące składniki kliknij opcję Protokół internetowy (TCP/IP), a następnie kliknij polecenie Właściwości. Zostanie wyświetlone okno dialogowe Właściwości Protokół internetowy (TCP/IP) .

  6. Kliknij opcję Uzyskaj adres IP automatycznie, a następnie kliknij przycisk OK.

  7. W oknie dialogowym Właściwości: połączenie lokalne kliknij przycisk Zamknij.


  8. W oknie dialogowym Stan: połączenie lokalne kliknij przycisk Zamknij.

  9. Kliknij przycisk Start, kliknij polecenie Uruchom, wpisz polecenie cmd, a następnie kliknij OK.

  10. W wierszu polecenia wpisz ping Nazwę komputera, a następnie naciśnij klawisz ENTER.

    Uwaga: Nazwa komputera jest symbolem zastępczym dla nazwy komputera, na którym jest uruchomiony program SQL Server 2003

    Pojawi się komunikat o błędzie podobny do następującego:

    Pingowanie Nazwy komputera [Dynamiczny adres IP] z 32 bajtami danych:

    Odpowiedź z Dynamicznego adresu IP: bajtów = 32 czas < 1 ms TTL = 128
    Odpowiedź z Dynamicznego adresu IP: bajtów = 32 czas < 1 ms TTL = 128
    Odpowiedź z Dynamicznego adresu IP: bajtów = 32 czas < 1 ms TTL = 128

    Statystyka badania dla Dynamiczny adres IP:
    Pakiety: Wysłane = 4, odebrane = 4, utracone = 0 (0% straty),
    Szacunkowy czas błądzenia pakietów w milisekundach:
    Minimum = 0 MS, maksimum = 0 MS, średnia = 0 MS
    Uwaga: Dynamiczny adres IP jest symbolem zastępczym dla dynamicznych IP komputera, Nazwa komputera .

  11. Aby zamknąć okno wiersza polecenia, wpisz polecenie exiti naciśnij klawisz ENTER.

  12. Powtórz kroki od c do e. Kliknij przycisk Użyj następującego adresu IP.

  13. W polu adres IP wpisz adres Dynamiczny adres IP .

    Uwaga: Dynamiczny adres IP jest symbolem zastępczym dla dynamicznych IP komputera, Nazwa komputera .

  14. W polu Maska podsieci wpisz maskę podsieci dla sieci.

  15. W polu Brama domyślna wpisz adres IP komputera lub urządzenia w sieci, która łączy się z siecią z inną siecią lub Internetem.

  16. W polu preferowany serwer DNS wpisz adres IP komputera, który tłumaczy nazwy hostów na adresy IP.

  17. W polu alternatywny serwer DNS wpisz adres IP komputera DNS, którego chcesz używać, jeśli preferowany serwer DNS (Domain Name System) jest niedostępny.

  18. Kliknij przycisk Zaawansowane. Pojawi się Zaawansowane ustawienia TCP/IP .

  19. W obszarze adresów IPkliknij przycisk Dodaj. Pojawi się okno dialogowe Adres TCP/IP .

  20. W polu adres IP wpisz adres IP losowe .

    Uwaga: Losowe IP jest symbolem zastępczym dla adresu IP, który nie jest używany przez inny komputer w sieci.

  21. W polu Maska podsieci wpisz maskę podsieci dla sieci, a następnie kliknij przycisk Dodaj.

  22. W polu Zaawansowane ustawienia TCP/IPkliknij przycisk OK.

  23. We właściwościach protokołu internetowego (TCP/IP) kliknij przycisk OK. W oknie dialogowym Właściwości: połączenie lokalne kliknij przycisk Zamknij. W oknie dialogowym Stan: połączenie lokalne kliknij przycisk Zamknij.

Połączyć się z komputerem serwera SQL Server 2000 z dodatkiem SP3 z komputera klienckiego za pomocą programu SQL Query Analyzer

  1. Uruchom program SQL Query Analyzer. Zostanie wyświetlone okno dialogowe Połącz z serwerem SQL .

  2. W polu Serwer SQL wpisz IP losowe.

    Uwaga: Losowe IP jest symbolem zastępczym dla adresu IP, który nie jest używany przez inny komputer w sieci.

  3. W polu Połącz używająckliknij opcję uwierzytelnianie systemu Windows.

  4. Kliknij przycisk OK. Można zauważyć komunikat o błędzie wymieniony w sekcji "Symptomy".

Połączyć się z komputerem serwera SQL Server 2000 z dodatkiem SP3 z komputera klienckiego za pomocą podglądu wierszy

  1. Uruchom Podgląd zestawu wierszy. Zostanie wyświetlone okno Microsoft OLE DB RowsetViewer .

  2. W menu plik kliknij przycisk Połącz pełny. Zostanie wyświetlone okno dialogowe Pełną Connect - nr opis dostępnych .

  3. Na liście dostawcy kliknij SQLOLEDB w obszarze połączenie.

  4. W polu źródło danych wpisz Losowych IP w obszarze źródło.

    Uwaga: Losowe IP jest symbolem zastępczym dla adresu IP, który nie jest używany przez inny komputer w sieci.

  5. W obszarze logowaniakliknij DBPROMPT_NOPROMPT na liście Monituj .

  6. Na karcie Właściwości kliknij przycisk Zaawansowane. Pojawi się okno dialogowe IDBProperties::SetProperties .

  7. Kliknij, aby zaznaczyć pole wyboru DBPROP_AUTH_INTEGRATED , a następnie kliknij przycisk OK.

  8. W oknie dialogowym Pełne Connect - nr opis dostępne kliknij przycisk OK. Można zauważyć komunikat o błędzie wymieniony w sekcji "Symptomy".

Uwaga Komputer kliencki i komputer serwera SQL Server 2000 z dodatkiem SP3 muszą być w tej samej domenie. Podczas próby nawiązania połączenia z komputerem serwera SQL Server 2000 z dodatkiem SP3 z Losowych IP z tego samego komputera, łączy się komputer serwera SQL Server 2000 z dodatkiem SP3 bez błędu.

Powiązane artykuły

Aby uzyskać więcej informacji, odwiedź następujące witryny firmy Microsoft Developer Network (MSDN) w sieci Web:

ConnectionGetSvrUser
http://msdn2.microsoft.com/en-us/library/Aa470056.aspx

OLE DB Test omówienie narzędzi
http://msdn2.microsoft.com/en-us/library/ms721219.aspxAby uzyskać dodatkowe informacje, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

Jak zmienić adres IP karty sieciowej w systemie Windows Server 2003 323444

Aby uzyskać dodatkowe informacje, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

824684 Opis standardowej terminologii używanej do opisywania aktualizacji oprogramowania firmy Microsoft

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Dziękujemy za opinię!

Dziękujemy za opinię! Wygląda na to, że połączenie Cię z jednym z naszych agentów pomocy technicznej pakietu Office może być pomocne.

×