Remediere: Primiți un mesaj de eroare "Imposibil de generat contextul SSPI" atunci când încercați să conectați la un computer cu server SQL Server 2000 Service Pack 3


Rezumat


Când încercați să vă conectați la un computer cu server Microsoft SQL Server 2000 Service Pack 3 (SP3) de pe un computer client, conexiunea nu reușește cu un mesaj de eroare dacă numele serverului nu pot fi rezolvate de la adresa Internet Protocol (IP). Acest comportament se produce deoarece SQLOLEDB interpretează incorect valoarea returnată de funcția ConnectionGetSvrUser de dbnetlib.
  • O remediere rapidă rezolvă această problemă.
  • Pentru a rezolva această problemă, creați manual o intrare de gazdă pentru adresa IP în computerul client.
  • Pentru a reproduce problema, creați configura adresa IP dinamică de pe un computer server și apoi conectați la computer server utilizând SQL Query Analyzer sau set de rânduri Viewer de pe un computer client.

Simptome


Când încercați să vă conectați un computer client la un computer cu server Microsoft SQL Server 2000 Service Pack 3, numele serverului nu pot fi rezolvate de la adresa Internet Protocol (IP) și conexiunea nu reușește.

Când vă conectați la computer server SQL Server 2000 Service Pack 3 cu SQL Query Analyzer, primiţi următorul mesaj de eroare:
Server: Msg 11004, Level 16, starea 1
[Microsoft] [ODBC SQL Server Driver] Imposibil de generat contextul SSPI
Când utilizați SQL Server OLE DB Provider (SQLOLEDB) pentru conectarea la un computer cu server SQL Server 2000 utilizând set de rânduri Viewer, primiţi următorul mesaj de eroare:
Sursă: "Microsoft OLE DB Provider pentru SQL Server"

Interfață: IID_IDBInitialize
Rezultate: 0x80004005 = E_FAIL

ISQLErrorInfo: [HY000] [0x00002afc]
IErrorInfo: [0x00002afc] "Imposibil de generat contextul SSPI"

Fișier: D:\MDACTools\rowsetviewer\CBase.cpp
Linie: 1067

Cauza


Când SQLOLEDB apelează funcția ConnectionGetSvrUser a bibliotecii dbnetlib, se interpretează incorect care această funcție returnează o valoare Boolean. Funcția ConnectionGetSvrUser este proiectat pentru a returna un gol. De aceea, orice se află în registrul EAX devine valoarea returnată.


Funcția ConnectionGetSvrUser intern apelează funcția gethostbyaddr . Funcția gethostbyaddr obține numele de gazdă care corespunde unei anumite adrese IP. Dacă funcția gethostbyaddr nu reușește, returnează un caracter zero la registrul EAX. De aceea, funcția ConnectionGetSvrUser returnează o valoare fals . Acest comportament determină o eroare de log on la computer server SQL Server 2000 Service Pack 3.


Rezolvare


O remediere rapidă compatibilă este disponibilă de la Microsoft. Cu toate acestea, această remediere rapidă este destinată pentru a corecta doar problema descrisă în acest articol. Aplicați această remediere rapidă numai pentru sistemele care întâmpină această problemă anume.

Dacă remedierea rapidă este disponibilă pentru descărcare, există o secțiune "Descărcare remediere rapidă disponibilă" în partea de sus a acestui articol din baza de cunoștințe. Dacă nu apare această secţiune, trimite o solicitare de la serviciul pentru clienți Microsoft de asistență pentru a obţine remedierea rapidă.

Notă Dacă se produc probleme suplimentare sau este necesară depanarea, poate fi necesar să creați o solicitare de asistenţă separată. Costurile de obicei pentru suport se vor aplica pentru sprijin suplimentar, întrebări și probleme care nu sunt specifice pentru această remediere rapidă . Pentru o listă completă cu numerele de telefon ale clienților servicii și asistență Microsoft sau pentru a crea o solicitare de asistenţă separată, vizitați următorul site Web Microsoft:Notă Formularul "Descărcare remediere rapidă disponibilă" afişează limbile pentru care este disponibilă remedierea rapidă. Dacă nu vedeți limba dvs., înseamnă că o remediere rapidă nu este disponibilă pentru respectiva limbă. Versiunea în limba engleză a acestei remedieri rapide are atributele de fișier (sau o versiune ulterioară) care sunt listate în următorul tabel. Datele şi orele acestor fişiere sunt listate în ora universală (UTC). Când vizualizaţi informaţiile despre fișier, acesta este convertit la ora locală. Pentru a afla diferența între timpul universal și cel local, utilizați fila fusul orar din instrumentul dată și oră din panoul de Control.
  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


Soluție


Pentru a rezolva această problemă, creați manual o intrare de gazdă de pe computerul client pentru adresa IP pe care doriți să vă conectați.
  1. Porniți Windows Explorer.
  2. Găsiți fișierul Hosts, și apoi deschideți fișierul în notepad.

    Notă Găsiți fișierul în calea %SystemRoot%\System32\Drivers\Etc.
  3. Adăugați următoarele la sfârșitul fișierului:
    IP aleatoriu Nume computer

    Notă IP aleatoare este un substituent pentru adresa IP care nu este utilizat de un alt computer din rețea. Nume computer este un substituent pentru numele computerului care are SQL Server 2000 Service Pack 3 rulează pe acesta. Adresa IP aleatoare IP și numele de Nume de Computer trebuie separate de cel puțin un spațiu.
  4. În meniul fișier , faceți clic pe Salvare.
  5. Închideți fișierul.

Stare


Microsoft a confirmat că aceasta este o problemă cu produsele Microsoft enumerate în secţiunea „Se aplică la".

Mai multe informații


Pași pentru reconstituirea problemei

Configurare adresa IP dinamică

  1. Faceți Log on ca administrator pe computerul care execută SQL Server 2000 Service Pack 3.
  2. În panoul de Control, faceți dublu clic pe Conexiuni în rețea.
  3. Faceți dublu clic pe conexiunea locală pe care doriți să modificați.
  4. În caseta de dialog Stare conexiune rețea locală , faceți clic pe Proprietăți. Apare caseta de dialog Proprietăţi conexiune locală .
  5. În caseta conexiunea utilizează următoarele elemente , faceți clic pe Internet Protocol (TCP/IP)și apoi faceți clic pe Proprietăți. Apare caseta de dialog Proprietăţi Protocol Internet (TCP/IP) .
  6. Obţine automat o adresă IP, și apoi faceți clic pe OK.
  7. În caseta de dialog Proprietăţi conexiune locală , faceți clic pe închidere.

  8. În caseta de dialog Stare conexiune rețea locală , faceți clic pe închidere.
  9. Faceți clic pe Start, faceți clic pe Executare, tastați cmd și apoi faceți clic pe OK.
  10. La promptul de comandă, tastați Numele computeruluiping, și apoi apăsați ENTER.

    Notă Nume computer este un substituent pentru numele de computer care execută SQL Server 2003

    Primiți un mesaj de eroare asemănător cu următorul:
    Ping Nume Computer [IP dinamică] cu 32 bytes de date:

    Răspuns de la IP dinamică: bytes = 32 time < 1ms TTL = 128
    Răspuns de la IP dinamică: bytes = 32 time < 1ms TTL = 128
    Răspuns de la IP dinamică: bytes = 32 time < 1ms TTL = 128

    Ping statistics pentru IP dinamică:
    Pachete: Sent = 4, Received = 4, Lost = 0 (0 % loss),
    Aproximative ori dus-întors în Val-secunde:
    Minimum = 0ms, Maximum = 0ms, medie = 0ms
    Notă IP dinamică este un substituent pentru IP dinamică a computerului Numele computerului .
  11. Pentru a ieși din linia de comandă, tastați exitși apoi apăsați ENTER.
  12. Repetați pașii c prin e. faceți clic pe utilizați următoarea adresă IP.
  13. În caseta adresă IP , tastați adresa IP dinamică .

    Notă IP dinamică este un substituent pentru IP dinamică a computerului Numele computerului .
  14. În caseta mască de subreţea , tastați masca de subrețea pentru rețeaua.
  15. În caseta de gateway implicit , tastați adresa IP a computerului sau dispozitivului în rețea care se conectează rețeaua de la o altă rețea sau la Internet.
  16. În caseta de server DNS preferat , tastați adresa IP a computerului care rezolvă numele de gazdă la adrese IP.
  17. În caseta de server DNS alternativ , tastați adresa IP a DNS computerul pe care doriți să utilizați dacă serverul DNS (Domain Name System) preferată devine indisponibilă.
  18. Faceți clic pe Avansat. Setări TCP/IP complexe apare.
  19. Sub adrese IP, faceți clic pe Adăugare. Apare caseta de dialog Adresă TCP/IP .
  20. În caseta adresă IP , tastați adresa IP aleatoare .

    Notă IP aleatoare este un substituent pentru adresa IP care nu este utilizat de un alt computer din rețea.
  21. În caseta mască de subreţea , tastați masca de subrețea pentru rețea și apoi faceți clic pe Adăugare.
  22. În Setări TCP/IP complexe, faceți clic pe OK.
  23. În Proprietăţi Protocol Internet (TCP/IP) , faceți clic pe OK. În caseta de dialog Proprietăţi conexiune locală , faceți clic pe închidere. În caseta de dialog Stare conexiune rețea locală , faceți clic pe închidere.

Conectați la computer server SQL Server 2000 Service Pack 3 de pe un computer client prin SQL Query Analyzer

  1. Porniți SQL Query Analyzer. Apare caseta de dialog conectarea la SQL Server .
  2. În caseta de SQL Server , tastați IP aleatoare.

    Notă IP aleatoare este un substituent pentru adresa IP care nu este utilizat de un alt computer din rețea.
  3. Sub Conectare utilizând, faceți clic pe autentificare Windows.
  4. Faceți clic pe OK. Observați mesajul de eroare menționat în secțiunea "simptome".

Conectați la computer server SQL Server 2000 Service Pack 3 de pe un computer client prin vizualizatorul set de rânduri

  1. Porniți vizualizatorul de set de rânduri. Apare fereastra Microsoft OLE DB RowsetViewer .
  2. În meniul fișier , faceți clic pe Conecta completă. Apare caseta de dialog Complet conecta - No Descrierea disponibile .
  3. În lista de furnizor , faceți clic pe SQLOLEDB sub conexiune.
  4. În caseta sursa de date , tastați Aleatoriu IP sub sursă.

    Notă IP aleatoare este un substituent pentru adresa IP care nu este utilizat de un alt computer din rețea.
  5. Sub Log in, faceți clic pe DBPROMPT_NOPROMPT în lista de Prompt .
  6. În fila de Proprietăți , faceți clic pe complex. Apare caseta de dialog IDBProperties::SetProperties .
  7. Faceți clic pentru a bifa caseta de selectare DBPROP_AUTH_INTEGRATED , și apoi faceți clic pe OK.
  8. În caseta de dialog Complet conectaţi - No Descrierea disponibile , faceți clic pe OK. Observați mesajul de eroare menționat în secțiunea "simptome".
Notă Computerul client și server SQL Server 2000 Service Pack 3 computerul trebuie să fie în același domeniu. Când încercați să vă conectați la computer server SQL Server 2000 Service Pack 3 cu Aleatoriu IP de pe același computer, acesta se conectează la SQL Server 2000 Service Pack 3 pe un computer server fără erori.

Referințe


Pentru mai multe informații, vizitați următorul site Web Microsoft Developer Network (MSDN):
Prezentare generală a OLE DB instrumentelor de testare
http://msdn2.microsoft.com/en-us/library/ms721219.aspx
Pentru informații suplimentare, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:

323444 cum se modifică adresa IP a adaptorului de rețea în Windows Server 2003

Pentru informații suplimentare, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:

824684 Descrierea terminologiei standard care este utilizat pentru a descrie actualizările de software Microsoft