REVISIÓN: Recibe un mensaje de error "No se puede generar contexto SSPI" cuando intenta conectarse a un servidor SQL Server 2000 SP3


Resumen


Cuando intenta conectarse a un equipo de servidor de Microsoft SQL Server 2000 Service Pack 3 (SP3) desde un equipo cliente, la conexión se produce un error con un mensaje de error si no se puede resolver el nombre del servidor desde la dirección de protocolo Internet (IP). Este comportamiento se produce porque SQLOLEDB interpreta incorrectamente el valor devuelto de la función ConnectionGetSvrUser de dbnetlib.
  • Una revisión resuelve este problema.
  • Para evitar este problema, cree manualmente una entrada de host para la dirección IP en el equipo cliente.
  • Para reproducir el problema, crear y configurar la dirección IP dinámica del equipo servidor y, a continuación, conectarse al equipo servidor mediante el analizador de consultas SQL o el Visor de conjuntos de filas desde un equipo cliente.

Síntomas


Cuando intenta conectar un equipo cliente a un servidor Microsoft SQL Server 2000 SP3, no se puede resolver el nombre del servidor desde la dirección de protocolo Internet (IP) y se produce un error en la conexión.

Cuando se conecta al equipo servidor SQL Server 2000 SP3 con el analizador de consultas SQL, recibirá el siguiente mensaje de error:
Servidor: Msg 11004, nivel 16, estado 1
[Microsoft] [ODBC SQL Server Driver] No se puede generar el contexto SSPI
Cuando se utiliza el SQL Server OLE DB proveedor (SQLOLEDB) para conectarse a un equipo de servidor de SQL Server 2000 mediante el Visor de conjuntos de filas, recibirá el siguiente mensaje de error:
Fuente: "proveedor Microsoft OLE DB para SQL Server"

Interfaz: IID_IDBInitialize
Resultado: 0 x 80004005 = E_FAIL

ISQLErrorInfo: [HY000] [0x00002afc]
IErrorInfo: [0x00002afc] "no se puede generar contexto SSPI"

Archivo: D:\MDACTools\rowsetviewer\CBase.cpp
Línea: 1067

Causa


Cuando SQLOLEDB llama a la función ConnectionGetSvrUser de la biblioteca dbnetlib, que interpreta incorrectamente que esta función devuelve un valor booleano. La función ConnectionGetSvrUser está diseñada para devolver un vacío. Por lo tanto, todo lo que reside en el registro EAX se convierte en el valor devuelto.


La función ConnectionGetSvrUser llama internamente a la función gethostbyaddr . La función gethostbyaddr Obtiene el nombre de host que corresponde a una dirección IP determinada. Si se produce un error en la función gethostbyaddr , devuelve un carácter cero en el registro EAX. Por lo tanto, la función ConnectionGetSvrUser devuelve un valor FALSE . Este comportamiento provoca un error de inicio de sesión en el equipo de servidor de SQL Server 2000 SP3.


Solución


Existe un hotfix disponible desde Microsoft. Sin embargo, esta revisión se diseñó para corregir únicamente el problema que se describe en este artículo. Aplíquela sólo a sistemas que experimenten este problema específico.

Si la revisión está disponible para su descarga, hay una sección de "Descarga de revisión disponible" en la parte superior de este artículo de Knowledge Base. Si esta sección no aparece, envíe una solicitud al servicio de atención al cliente y soporte técnico para obtener la revisión.

Nota: Si se producen problemas adicionales o si se requiere cualquier otra solución, será necesario crear una solicitud de revisión independiente. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no califican para esta revisión específica. Para obtener una lista completa de los números de teléfono de servicio al cliente de Microsoft o para crear una solicitud de servicio independiente, visite el siguiente sitio Web de Microsoft:Nota: El formulario de "Descarga de Hotfix disponible" muestra los idiomas para los que el Hotfix está disponible. Si no ve su idioma, es porque no hay una revisión para ese idioma. Versión del inglés de esta revisión tiene los atributos de archivo (o posterior) que figuran en la tabla siguiente. Las fechas y horas de estos archivos se muestran en hora universal coordinada (UTC). Al ver la información del archivo, se convierte en hora local. Para encontrar la diferencia entre la hora UTC y la hora local, utilice la ficha zona horaria en la herramienta fecha y hora del Panel 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

Solución alternativa


Para evitar este problema, cree manualmente una entrada de host en el equipo cliente para la dirección IP que se desea conectar.
  1. Inicie el Explorador de Windows.
  2. Busque el archivo Hosts y, a continuación, abra el archivo en el Bloc de notas.

    Nota: Puede buscar el archivo en la ruta de acceso de %SystemRoot%\System32\Drivers\Etc.
  3. Agregue lo siguiente al final del archivo:
    IP aleatoria Nombre del equipo

    Nota: IP aleatoria es un marcador de posición para la dirección IP que no está en uso por otro equipo en la red. Nombre del equipo es un marcador de posición para el nombre del equipo que tiene el SP3 de SQL Server 2000 ejecutando en él. La dirección IP de IP aleatoria y el nombre de Equipo deben estar separados por al menos un espacio.
  4. En el menú archivo , haga clic en Guardar.
  5. Cierre el archivo.

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".

Más información


Pasos para reproducir el problema

Configurar la dirección IP dinámica

  1. Inicie sesión como administrador en el equipo que está ejecutando SQL Server 2000 SP3.
  2. En el Panel de Control, haga doble clic en Conexiones de red.
  3. Haga doble clic en la conexión de área local que desea modificar.
  4. En el cuadro de diálogo Estado de conexión de área Local , haga clic en Propiedades. Aparecerá el cuadro de diálogo Propiedades de conexión de área Local .
  5. En el cuadro esta conexión utiliza los siguientes elementos , haga clic en Protocolo Internet (TCP/IP)y, a continuación, haga clic en Propiedades. Aparecerá el cuadro de diálogo Propiedades de protocolo Internet (TCP/IP) .
  6. Haga clic en obtener una dirección IP automáticamentey, a continuación, haga clic en Aceptar.
  7. En el cuadro de diálogo Propiedades de conexión de área Local , haga clic en Cerrar.

  8. En el cuadro de diálogo Estado de conexión de área Local , haga clic en Cerrar.
  9. Haga clic en Inicio, haga clic en Ejecutar, escriba cmd y, a continuación, haga clic en Aceptar.
  10. En el símbolo del sistema, escriba ping Nombre del equipoy, a continuación, presione ENTRAR.

    Nota: Nombre del equipo es un marcador de posición para el nombre del equipo que está ejecutando SQL Server 2003

    Recibirá un mensaje de error similar al siguiente:
    Haciendo ping Nombre de equipo [IP dinámica] con 32 bytes de datos:

    Respuesta de IP dinámica: bytes = 32 tiempo < 1 ms TTL = 128
    Respuesta de IP dinámica: bytes = 32 tiempo < 1 ms TTL = 128
    Respuesta de IP dinámica: bytes = 32 tiempo < 1 ms TTL = 128

    Estadísticas de ping para IP dinámica:
    Paquetes: Enviados = 4, recibidos = 4, perdidos = 0 (0% perdidos),
    Tiempos aproximados de ida y vuelta en milisegundos:
    Mínimo = 0ms, máximo = 0ms, promedio = 0ms
    Nota: IP dinámico es un marcador de posición para la IP dinámica del equipo Nombre del equipo .
  11. Para salir del símbolo del sistema, escriba exity, a continuación, presione ENTRAR.
  12. Repita los pasos c a e. Haga clic en usar la siguiente dirección IP.
  13. En el cuadro dirección IP , escriba la dirección IP dinámica .

    Nota: IP dinámico es un marcador de posición para la IP dinámica del equipo Nombre del equipo .
  14. En el cuadro máscara de subred , escriba la máscara de subred para la red.
  15. En el cuadro puerta de enlace predeterminada , escriba la dirección IP del equipo o del dispositivo de la red que la conecta a otra red o a Internet.
  16. En el cuadro servidor DNS preferido , escriba la dirección IP del equipo que resuelve los nombres de host en direcciones IP.
  17. En el cuadro servidor DNS alternativo , escriba la dirección IP del equipo DNS que desea utilizar si el servidor DNS (sistema de nombres de dominio) preferido deja de estar disponible.
  18. Haga clic en Avanzadas. Aparece la Configuración avanzada de TCP/IP .
  19. Bajo direcciones IP, haga clic en Agregar. Aparecerá el cuadro de diálogo Dirección TCP/IP .
  20. En el cuadro dirección IP , escriba la dirección IP al azar .

    Nota: IP aleatoria es un marcador de posición para la dirección IP que no está en uso por otro equipo en la red.
  21. En el cuadro máscara de subred , escriba la máscara de subred para la red y, a continuación, haga clic en Agregar.
  22. En la Configuración avanzada de TCP/IP, haga clic en Aceptar.
  23. En las Propiedades de protocolo Internet (TCP/IP) , haga clic en Aceptar. En el cuadro de diálogo Propiedades de conexión de área Local , haga clic en Cerrar. En el cuadro de diálogo Estado de conexión de área Local , haga clic en Cerrar.

Conectar con el equipo de servidor de SQL Server 2000 SP3 desde un equipo cliente a través del analizador de consultas SQL

  1. Inicie el analizador de consultas SQL. Aparecerá el cuadro de diálogo Conectar a SQL Server .
  2. En el cuadro SQL Server , escriba IP aleatoria.

    Nota: IP aleatoria es un marcador de posición para la dirección IP que no está en uso por otro equipo en la red.
  3. En Conectar usando, haga clic en autenticación de Windows.
  4. Haga clic en Aceptar. Observe el mensaje de error que se menciona en la sección "Síntomas".

Conectar con el equipo de servidor de SQL Server 2000 SP3 desde un equipo cliente mediante el Visor de conjuntos de filas

  1. Inicie el Visor de conjuntos de filas. Aparecerá la ventana RowsetViewer Microsoft OLE DB .
  2. En el menú archivo , haga clic en Conectar completo. Aparecerá el cuadro de diálogo Conectar completo - sin descripción disponible .
  3. En la lista proveedor , haga clic en SQLOLEDB en conexión.
  4. En el cuadro origen de datos , escriba IP aleatorias en origen.

    Nota: IP aleatoria es un marcador de posición para la dirección IP que no está en uso por otro equipo en la red.
  5. En el Inicio de sesión, haga clic en DBPROMPT_NOPROMPT en la lista de mensajes .
  6. En la ficha Propiedades , haga clic en Opciones avanzadas. Aparecerá el cuadro de diálogo IDBProperties:: SetProperties .
  7. Haga clic para activar la casilla de verificación DBPROP_AUTH_INTEGRATED y, a continuación, haga clic en Aceptar.
  8. En el cuadro de diálogo Conectar completo - sin descripción disponible , haga clic en Aceptar. Observe el mensaje de error que se menciona en la sección "Síntomas".
Nota: El equipo cliente y el equipo de servidor de SQL Server 2000 Service Pack 3 deben estar en el mismo dominio. Cuando intenta conectar con el equipo de servidor de SQL Server 2000 SP3 con la IP aleatorio desde el mismo equipo, se conecta con el equipo de servidor de SQL Server 2000 SP3 sin errores.

Referencias


Para obtener más información, visite los siguientes sitios Web de Microsoft Developer Network (MSDN):
Introducción a las herramientas de prueba de OLE DB
http://msdn2.microsoft.com/en-us/library/ms721219.aspx
Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

323444 cómo cambiar la dirección IP de un adaptador de red en Windows Server 2003

Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

824684 descripción de la terminología estándar que se utiliza para describir las actualizaciones de software de Microsoft