Resolución de errores de conectividad en SQL Server

Este artículo le ayuda a resolver varios problemas de conectividad en SQL servidor.

Nota

Para obtener un recorrido guiado por la experiencia de este artículo, consulte Resolución de errores de conectividad para SQL Server.

Versión original del producto:   Microsoft SQL Server
Número KB original:   4009936

Requisito previo

Para usar de forma eficaz este solucionador de problemas, es posible que desee recopilar la siguiente información.

  1. El texto completo del mensaje de error junto con los códigos de error y si el error es intermitente (solo ocurre a veces) o coherente (ocurre todo el tiempo).

  2. Errores de SQL Server desde los que puede tener en cuenta lo siguiente:

    1. Nombre de dominio completo (FQDN) de la máquina SQL Server o, en el caso de instalaciones agrupadas en clúster, el nombre virtual de FQDN. Si usa una instancia con nombre, anote el nombre de la instancia.

      Nota

      Puedes buscar la cadena "Nombre del servidor es" para obtener esta información en el registro de errores.

    2. Bibliotecas de red y puertos en los que SQL escucha la instancia. Mensajes de ejemplo:

      Canalizaciones con nombre: el proveedor de conexión local del servidor está listo para aceptar la conexión en [ \ \ .\pipe\sql\query ]. TCP/IP y número de puerto: el servidor escucha [ ::1 1433].

  3. Registros de eventos de aplicaciones y del sistema SQL Server y sistemas cliente.

  4. Si las conexiones fallan desde una aplicación, la cadena de conexión de la aplicación. Normalmente se encuentran en archivos Web.config para ASP.NET aplicaciones.

Lista de comprobación

  • Asegúrese SQL que se ha iniciado el servidor y verá el siguiente mensaje en el SQL Server ErrorLog:

    SQL Server está listo para las conexiones de cliente. Este es un mensaje informativo; no se requiere ninguna acción del usuario.

  • Compruebe la conectividad básica a través de la dirección IP y compruebe si hay anomalías: ping -a <SQL Server machine>, ping -a <SQL Server IP address> . Si observa algún problema, trabaje con el administrador de red para solucionar el mismo problema.

  • Compruebe si SQL está escuchando en los protocolos adecuados revisando el ErrorLog.

  • Compruebe si puede conectarse a un SQL mediante un archivo UDL. Si funciona, puede haber un problema con la cadena de conexión. Para obtener instrucciones sobre el procedimiento sobre la prueba de UDL, pase a Conectarse SQL servidor mediante una sección de archivo UDL.

  • Compruebe si puede conectarse a SQL Server desde otros sistemas cliente e inicios de sesión de usuario diferentes. Si es posible, el problema podría ser específico del cliente o inicio de sesión que está experimentando el problema. Compruebe si hay punteros adicionales en los registros de eventos de Windows en el cliente problemático. Comprueba también si los controladores de red están actualizados.

  • Si está experimentando errores de inicio de sesión, asegúrese de que el usuario tiene un inicio de sesión en el nivel de servidor y los permisos adecuados para conectarse a la base de datos a la que el usuario está intentando conectarse.

Para obtener más información acerca del error relevante, consulte la siguiente sección Comprobar errores de conexión.

Comprobar errores de conexión

El error A relacionado con la red o específico de la instancia que se produjo al establecer una conexión SQL Server un error representa uno o varios de los siguientes mensajes de error:

  • Se produjo un error específico de instancia o relacionado con la red al establecer una conexión con SQL Server. No se encontró el servidor o no se puede acceder a él. Compruebe que el nombre de la instancia es correcto y que SQL Server está configurado para permitir conexiones remotas.

    provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified
    
  • SQL Server error de vínculo de datos de cliente nativo

    [Microsoft SQL Server Native Client 10.0]: Login timeout expired
    [Microsoft SQL Server Native Client 10.0]: A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
    [Microsoft SQL Server Native Client 10.0]: SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
    
  • Se produjo un error específico de instancia o relacionado con la red al establecer una conexión con SQL Server. No se encontró el servidor o no se puede acceder a él. Compruebe que el nombre de la instancia es correcto y que SQL Server está configurado para permitir conexiones remotas.

    provider: TCP Provider, error: 0
    A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
    Microsoft SQL Server, Error: 10060
    
  • Se produjo un error específico de instancia o relacionado con la red al establecer una conexión con SQL Server. No se encontró el servidor o no se puede acceder a él. Compruebe que el nombre de la instancia es correcto y que SQL Server está configurado para permitir conexiones remotas.

    provider: Named Pipes Provider, error:40 - Could not open a connection to SQL Server
    Microsoft SQL Server, Error:53
    The network path was not found
    
  •   [Microsoft][SQL Server Native Client 11.0]TCP Provider: No connection could be made because the target machine actively refused it.
      [Microsoft][SQL Server Native Client 11.0]Login timeout expired
      [Microsoft][SQL Server Native Client 11.0]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
    

Puede empezar a solucionar problemas desde esta sección: causas comunes de varios problemas de conexión.

Causas comunes de varios problemas de conexión

Go through each of the causes that is applicable to your instance below and for each of the applicable causes, try the corresponding resolutions.

Causa 1: Se especifica un nombre de servidor incorrecto en la cadena de conexión o en el cuadro de diálogo nombre del servidor

Para confirmar:

  • Asegúrese de que el nombre del servidor que especifica la aplicación coincide con lo que tiene en el registro de errores.

  • Vaya al archivo de edición de archivos de configuración de ASP.NET para la aplicación y asegúrese de que la sección Cadenas de conexión apunte al nombre del servidor correcto y use las cadenasde conexión de SQL Server adecuadas para ASP.NET web de ASP.NET.

    Nota

    Para obtener mediante programación las cadenas de conexión de la aplicación, consulte el ejemplo en How to: Read Connection Strings from the Web.config File.

Causa 2: alias incorrecto en el equipo cliente

Los alias se suelen usar en entornos cuando necesita conectarse a SQL Server con un nombre alternativo o cuando hay problemas de resolución de nombres en la red. Un alias incorrecto en el equipo cliente puede provocar que las conexiones de las aplicaciones vayan al servidor incorrecto, lo que da lugar a un error.

Cosas que se pueden probar:

  • Para SQL Server utilidad de red de cliente, escribacliconfg.exe en el comando Ejecutar.

  • Compruebe si hay algún alias definido para el servidor al que está intentando conectarse.

  • Si está presente, haga lo siguiente:

    1. Haga clic en Editar y cambie el nombre del alias del servidor. (Por ejemplo, si el nombre del servidor es MySQL, cámbiele el nombre MySQL_test) y vuelva a intentar la conexión. Si la conexión funciona, es una indicación de que tenía un alias incorrecto, probablemente de una configuración antigua que ya no es necesaria. Si continúa experimentando el error, cambie el nombre del alias a su nombre original y continúe con el paso siguiente.

    2. Compruebe los parámetros de conexión para el alias y asegúrese de que son correctos. Algunos de los escenarios comunes que pueden causar problemas con la conectividad son:

      • Dirección IP incorrecta para el parámetro De nombre de servidor. Asegúrese de que esta dirección IP coincide con la entrada del SQL ErrorLog.

      • Nombre de servidor incorrecto en el parámetro Nombre del servidor. Por ejemplo, aunque el alias de servidor señala el nombre de servidor correcto, si el parámetro Nombre del servidor tiene un valor incorrecto, se producirá un error en las conexiones.

      • Si usa un alias de canalizaciones con nombre, asegúrese de que el nombre de la canalización tenga el formato correcto.

        • Para conectarse a una instancia predeterminada denominada Mydefaultinstance, el nombre de la canalización debe ser \\Mydefaultinstance\pipe\sql\query
        • Para conectarse a una instancia con nombre MySQL\Named, el nombre de la canalización debe ser \\MySQL\pipe\MSSQL$Named\sql\query

Causa 3(Instancia predeterminada): firewalls entre el cliente y el servidor que bloquean el puerto SQL Server la instancia está escuchando

Instancia predeterminada: una instancia predeterminada normalmente se ejecuta en el puerto 1433. Algunas instalaciones también usan un puerto no estándar (distinto de 1433) para ejecutar SQL instancias. Es posible que el firewall bloquee cualquiera de ellos.

Cosas que se pueden probar:

  • Determine el número de puerto que se SQL la instancia. Si la instancia predeterminada del servidor de SQL usa un puerto no estándar SQL Server, consulte Ejecución de una instancia "predeterminada" en un puerto TCP no predeterminado (o no estándar): sugerenciaspara hacer que la conectividad de la aplicación funcione.

  • Intente anexar el número de puerto de SQL Server al nombre del servidor con el formato <servername> , número de puerto y vea si funciona. Por ejemplo, si el nombre de la instancia de SQL es MySQLDefaultinstance y se ejecuta en el puerto 2000, especifique el nombre del servidor como MySQLServer, 2000 y vea si funciona. Si funciona, es una indicación de que el firewall está bloqueando el puerto.

  • Si se confirma, agregue el puerto a la lista de exclusión del firewall. Para obtener instrucciones, pase a la sección Configuración de firewalls.

Causa 4(Instancia con nombre): SQL no se ha iniciado el explorador

Las aplicaciones cliente que se conectan a una instancia con nombre de SQL Server usan el servicio de explorador de SQL en el sistema donde se ejecuta SQL para enumerar el puerto en el que SQL escucha. Si no se inicia el servicio de explorador, se producirá un error en las conexiones.

Cosas que se pueden probar:

En el sistema que ejecuta la instancia de SQL Server, use el Administrador de configuración de SQL Server o el applet Servicios del Panel de control e inicie el servicio del explorador SQL si aún no se ha iniciado. Para obtener más información, vea How to: Start and Stop the SQL Server Browser Service

Causa 5 (instancia con nombre): el puerto UDP 1434 usado por SQL explorador está bloqueado en la red

Si su SQL es una instancia con nombre, puede que se haya configurado para usar puertos dinámicos o un puerto estático. En cualquier caso, las bibliotecas de red subyacentes consultan SQL el servicio del explorador que se ejecuta en el equipo SQL Server a través del puerto UDP 1434 para enumerar el número de puerto de la instancia con nombre. Si un firewall entre el cliente y el servidor bloquea este puerto UDP, la biblioteca de cliente no puede determinar el puerto (un requisito de conexión) y se produce un error en la conexión.

Para confirmar:

  • Método 1:

    1. Anote el puerto en el que la SQL está escuchando desde el registro SQL Server error.
    2. Intente conectarse a la instancia con nombre con el número de puerto anexado al nombre del servidor con el formato<nombreDeServidor\nombreDeEquipo >, número de puerto y vea si funciona. Si funciona, es una indicación de que el firewall está bloqueando el puerto UDP 1434. Por ejemplo, si el nombre de la instancia de SQL es MySQL\Namedinstance y se ejecuta en el puerto 3000, especifique el nombre del servidor como MySQL\Namedinstance, 3000 y vea si funciona. Si funciona, podría significar que el puerto UDP 1434 está bloqueado o que el puerto estático está bloqueado o ambos. Para confirmar si es el puerto UDP o el puerto estático mediante Portqry del método 2 siguiente.
  • Método 2:

    1. Usa la herramienta PortqryUI con la instancia con nombre y observa el resultado resultante. Si ve el mensaje que indica que el puerto UDP 1434 está filtrado, es una indicación de que el puerto está bloqueado en la red. Para obtener instrucciones sobre cómo usar la herramienta, pase a Usar la herramienta PortqryUI SQL Server sección.

Cosas que se pueden probar:

En primer lugar, determine si SQL Server escucha en el puerto dinámico frente a estático y use el procedimiento que sea relevante para su escenario. Cómo saber si SQL escucha en puertos dinámicos frente a estáticos, pase a Información si SQL escucha en la sección De puertos dinámicos frente a estáticos.

  • Caso 1: Puertos dinámicos. En este caso, debe asegurarse de que el servicio del explorador SQL se ha iniciado realmente y que el puerto UDP 1434 no está bloqueado en el firewall entre el cliente y el servidor. Si no puede hacerlo, debe cambiar la instancia de SQL Server para usar un puerto estático y usar el procedimiento documentado en Configurar un servidor para escuchar en un puerto TCP específico.

  • Caso 2: la configuración estática del puerto SQL explorador no se está ejecutando o UDP 1434 no se puede abrir en el firewall. En este caso, debe asegurarse de que el puerto estático se especifica en la cadena de conexión y que el firewall no bloquea ese puerto. Para obtener instrucciones, pase a la sección Configuración de firewalls.

Si esto no resuelve el problema, pase a la sección Aún teniendo problemas.

Configuración de firewalls

A continuación encontrará algunas capturas de pantalla rápidas que muestran la configuración necesaria de un firewall de Windows para conexiones correctas a una instancia predeterminada y a una instancia con nombre.

  • Una instancia predeterminada de SQL Server escucha en el puerto predeterminado 1433 en el servidor de Windows 2012 R2. En este escenario, debe asegurarse de que se agrega una excepción al puerto TCP 1433 en el firewall de Windows.

    1. Abra el firewall de Windows en el sistema que hospeda SQL instancia predeterminada del servidor y haga clic en Nueva regla en Reglas de entrada.

      Reglas inound

    2. Seleccione la opción Puerto y haga clic en Siguiente.

      InboundRulePort

    3. En la siguiente pantalla:

      • Seleccione TCP como protocolo.

      • Seleccione Puertos locales específicos y especifique el valor como 1433 y haga clic en Siguiente.

        TCP1433

    4. En la siguiente pantalla, seleccione Permitir la conexión y haga clic en Siguiente.

      AllowConnection

    5. En la siguiente pantalla, seleccione la opción que mejor se adapte a su entorno y haga clic en Siguiente.

      NewInboundRule

    6. En la siguiente pantalla, asigne el nombre a la regla y proporcione una descripción clara para futuras referencias y haga clic en Finalizar.

      NewInboundRuleName

    7. Una vez hecho esto, debería ver que la regla se crea y está habilitada de forma predeterminada.

      EnableInboundRule

  • Agregar una excepción para el puerto UDP 1434 para habilitar las conexiones a una instancia con nombre de SQL servidor:

    1. Abra el firewall de Windows en el sistema que hospeda SQL instancia predeterminada del servidor y haga clic en Nueva regla en Reglas de entrada.

      Reglas inound

    2. Seleccione la opción Puerto y haga clic en Siguiente.

      InboundRulePort

    3. En la siguiente pantalla:

      • Seleccione UDP como protocolo.

      • Seleccione Puertos locales específicos y especifique el valor como 1434 y haga clic en Siguiente.

        NewInboundUDP

    4. En la siguiente pantalla, seleccione Permitir la conexión y haga clic en Siguiente.

      AllowConnection

    5. En la siguiente pantalla, seleccione la opción que mejor se adapte a su entorno y haga clic en Siguiente.

      NewInboundRule

    6. En la siguiente pantalla, asigne el nombre a la regla y proporcione una descripción clara para futuras referencias y haga clic en Finalizar.

      NewInboundName2

    7. Una vez hecho esto, debería ver que la regla se crea y está habilitada de forma predeterminada.

      EnableInboundRule2

Si esto no resuelve el problema, pase a la sección Aún teniendo problemas.

Uso de la herramienta PortqryUI con SQL Server

Ubicación de descarga: PortqryUI

  1. Inicia la herramienta PortqryUI en el equipo cliente. (El equipo en el que tiene problemas de conexión, en el caso de las aplicaciones web, podría ser el servidor IIS)
  2. Especifique el nombre del servidor de la SQL Server o el nombre SQL servidor virtual en el FQDN o IP de destino que se consulta.
  3. Seleccione Servicio predefinido de consulta y seleccione SQL servicio en la lista desplegable.
  4. Haga clic en Consulta y examine el resultado y use la tabla siguiente para obtener punteros adicionales.
Tipo de instancia Salida de portqry Causas potenciales de problemas de conexión ¿Qué probar?
Instancia predeterminada Puerto TCP 1433 (servicio ms-sql-s): NO ESCUCHANDO Indica una de las siguientes opciones:
  • SQL no se ha iniciado.
  • TCP/IP no está habilitado en SQL protocolo de servidor.
  • SQL escucha en un puerto no predeterminado. (check errorlog)
  • El firewall entre el cliente y el servidor bloquea el puerto.
  • Asegúrese SQL que se ha iniciado.
  • Compruebe SQL de errores del número de puerto y úselo en las cadenas de conexión con el formato <servername> , portnumber.
  • Trabaje con el administrador de red o windows para asegurarse de que el puerto TCP 1433 no esté bloqueado por un firewall de la red o por el firewall de Windows en el SQL Server de red.
Nota Si desea resolver el problema del firewall, pase a la sección Configuración de firewalls.
Instancia predeterminada Puerto TCP 1433 (servicio ms-sql-s): LISTENING
  • La biblioteca cliente es capaz de conectarse correctamente a SQL equipo servidor, pero algo más en el nivel de la aplicación podría estar causando el problema.
  • Compruebe si el nombre del servidor se ha especificado correctamente en la cadena de conexión.
  • Si la cadena de conexión usa el número de puerto, se especifica correctamente en la cadena de conexión.
  • Cualquier alias antiguo definido en el cuadro.
Instancia con nombre Puerto UDP 1434 (servicio ms-sql-m): FILTRADO Indica una de las siguientes opciones:
  • SQL se inicia la instancia con nombre.
  • SQL explorador no se inició en el sistema que hospeda la SQL usuario.
  • El puerto UDP 1434 está bloqueado por un firewall en el servidor SQL o en la red entre el cliente y el servidor.
  • Se ha iniciado el servicio.
  • SQL se inicia el servicio de explorador.
  • Trabaje con el administrador de red o windows para asegurarse de que el puerto UDP 1434 no está bloqueado por un firewall de la red o por el firewall de Windows en el SQL Server sistema.
Nota Si desea resolver el problema del firewall, pase a la sección Configuración de firewalls.
Instancia con nombre El puerto UDP 1434 escucha
  • La biblioteca cliente es capaz de conectarse correctamente a SQL equipo servidor, pero algo más en el nivel de la aplicación podría estar causando el problema.
  • El nombre del servidor se especifica correctamente en la cadena de conexión.
  • El número de puerto no se especifica correctamente en la cadena de conexión.
  • Cualquier alias antiguo definido en el cuadro.

Resultados de ejemplos:

  • Instancia predeterminada en el puerto predeterminado: Escenario de trabajo

    DeaultInstanceDefaultPort_Working

  • Instancia predeterminada en el puerto predeterminado: escenario de no trabajo

    DeaultInstanceDefaultPort_NonWorking

  • Instancia con nombre: Escenario de trabajo: (Nombre de instancia: SQL 2014, nombre de host: SQLCONNVM)

    WorkingNameInstance

  • Instancia con nombre: Escenario no laborable: (Nombre de instancia: SQL 2014, nombre de host: SQLCONNVM)

    NonWorkingNameInstance

Para obtener más información, pase a la sección Configuración de firewalls.

Si esto no resuelve el problema, pase a la sección Aún teniendo problemas.

Saber si SQL escucha en puertos dinámicos frente a estáticos

  1. En SQL Server Configuration Manager, en el panel de la consola, expanda SQL Server Configuración de red, expanda Protocolos para y, a continuación, haga doble clic en TCP/IP.

  2. En el cuadro de diálogo Propiedades TCP/IP, en la pestaña Direcciones IP, aparecen varias direcciones IP con el formato IP1, IP2, hasta IPAll. Una de ellas es para la dirección IP del adaptador de bucle recuperación, 127.0.0.1. Aparecen direcciones IP adicionales para cada dirección IP del equipo. (Probablemente verá direcciones IP versión 4 e IP versión 6). Haga clic con el botón secundario en cada dirección y, a continuación, haga clic en Propiedades para identificar la dirección IP que desea configurar.

  3. Si el cuadro de diálogo Puertos dinámicos TCP contiene 0, indica que el motor de base de datos está escuchando en puertos dinámicos. Si contiene un número específico, significa que la instancia de base de datos está escuchando en un puerto estático.

    TCPDynamicPorts

Para obtener más información, vea Configurar un servidor para escuchar en un puerto TCP específico.

Si esto no resuelve el problema, pase a la sección Aún teniendo problemas.

No se pudo realizar ninguna conexión porque la máquina de destino la rechazó activamente

Para obtener más información sobre el error sin conexión, pase a la sección de mensaje de error completo.

Mensaje de error completo

Es posible que reciba un error similar al siguiente:

[Microsoft][SQL Server Native Client 11.0]TCP Provider: No connection could be made because the target machine actively refused it.
[Microsoft][SQL Server Native Client 11.0]Login timeout expired.
[Microsoft][SQL Server Native Client 11.0]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.

Puede empezar a solucionar problemas desde esta sección: causas comunes de varios problemas de conexión.

SQL Server no existe o acceso denegado

Puede empezar a solucionar problemas desde esta sección: causas comunes de varios problemas de conexión.

Error en la operación de tabla dinámica: no se puede encontrar un servidor para cargar el modelo de datos del libro

Puede empezar a solucionar problemas desde esta sección: causas comunes de varios problemas de conexión.

No se puede generar un mensaje de error de contexto SSPI

Security Support Provider Interface (SSPI) es un conjunto de API de Windows que permite la delegación y autenticación mutua sobre cualquier capa de transporte de datos genérica, como sockets TCP/IP. Por lo tanto, SSPI permite que un equipo que ejecuta un sistema operativo Windows delegue de forma segura un token de seguridad de usuario de un equipo a otro a través de cualquier capa de transporte que pueda transmitir bytes de datos sin procesar.
El error de contexto No se puede generar SSPI se genera cuando SSPI usa la autenticación Kerberos para delegar sobre TCP/IP y la autenticación Kerberos no puede completar las operaciones necesarias para delegar correctamente el token de seguridad de usuario en el equipo de destino que ejecuta SQL Server.

Para obtener información adicional sobre por qué no se pueden completar las operaciones kerberos, vaya a la sección Solución de problemas de autenticación debido a problemas de Kerberos para revisar e implementar los pasos.

Solución de problemas de autenticación debido a problemas de Kerberos

Los errores de autenticación Kerberos pueden producirse por diversos motivos. A continuación se destacan las principales causas y las resoluciones correspondientes:

Tipo de problema Resoluciones sugeridas
Problemas de SPN:
  • SPN que faltan: el SPN no está registrado en Active Directory.
  • Entradas de SPN incorrectas: el SPN existe, pero el número de puerto es incorrecto o existe en una cuenta distinta de la cuenta de servicio SQL cliente.
  • SPN duplicados: el mismo SPN existe en varias cuentas de Active Directory.
Compruebe el uso de Kerberos Configuration Manager para diagnosticar y solucionar problemas de SPN y delegación para diagnosticar y resolver problemas de SPN.

Nota Para comprender en profundidad los SPN, Kerberos y otros conceptos relacionados, revise la información del siguiente artículo de KB:
Cómo solucionar el mensaje de error "No se puede generar contexto SSPI"
SQL cuentas de servicio no son de confianza para la delegación. Si usa una cuenta del sistema local, el servidor central debe ser de confianza para la delegación en Active Directory. Use La pestaña de delegación del administrador de configuración de UseKerberos para confirmar y trabajar con el administrador de Active Directory para habilitar la delegación de la cuenta. Compruebe el uso del Administrador de configuración kerberos para diagnosticar y solucionar problemas de SPN y delegación para obtener información detallada en el siguiente párrafo.
Resolución de nombres incorrecta: es posible que el nombre del servidor se resuelva en una dirección IP diferente a la registrada por el servidor DNS de la red. ping -a <your_target_machine> (use -4 y -6 para IPv4 e IPv6 específicamente)
ping: una <Your_remote_IPAddress> nslookup (escriba el nombre de la máquina local y remota y la dirección IP varias veces)

Busque discrepancias y discrepancias en los resultados devueltos. La corrección de la configuración DNS en la red es fundamental para SQL conexión. Una entrada DNS incorrecta podría causar más adelante todo tipo de problema de conectividad.
Firewalls u otros dispositivos de red que impiden conexiones desde el cliente al controlador de dominio: los SPN se almacenan en Active Directory y si los clientes no pueden comunicarse con AD, la conexión no puede continuar. Consulte los siguientes vínculos para obtener información adicional:

Nota

  1. Cuando se inicia una instancia del motor de base SQL Server base de datos de SQL Server, se intenta registrar el SPN para el SQL Server servicio. Cuando se detiene la instancia, SQL Server intenta anular el registro del SPN. Para que esto suceda, la SQL de servicio necesita derechos ReadServicePrincipalName y WriteServicePrincipalName en active directory. Sin embargo, si la cuenta de servicio no tiene estos derechos, no se produce el registro automático de SPN y necesita trabajar con el administrador de Active Directory para registrar estos para las instancias de SQL para habilitar la autenticación Kerberos. En este escenario, si usa una instancia con nombre, será más conveniente usar un puerto estático para esa instancia. Si usa puertos dinámicos, el número de puerto puede cambiar cada vez que se reinicia el servicio y el SPN registrado manualmente para la instancia ya no es válido. Para obtener más información, vea Register a Service Principal Name for Kerberos Connections.

  2. En entornos en los que SQL está agrupado en clúster no se recomienda el registro automático de SPN porque puede tardar más tiempo en anular el registro del SPN y registrar r el SPN en Active Directory que el tiempo que tarda SQL en estar en línea. Si el registro de SPN no se realiza a tiempo, puede impedir que SQL se conecte porque el administrador del clúster no puede conectarse a SQL servidor.

Uso de Kerberos Configuration Manager para diagnosticar y solucionar problemas de SPN y delegación

  1. Descarga Microsoft® Kerberos Configuration Manager para SQL Server® e instálralo en un equipo cliente.

  2. Inicie la herramienta con una cuenta de dominio preferiblemente con una cuenta que tenga privilegios suficientes para crear SPN en su active directory. Vea la imagen siguiente:

    KerberosConfigManager

  3. Conéctese SQL Server desea recopilar la información relacionada con errores de Kerberos:

    ConnectKerberosConfigManager

  4. Una vez conectado, puede ver diferentes pestañas como se muestra a continuación:

    • Sistema: tiene la información básica del sistema.

      KerConfigManager_System

    • SPN: Proporciona al SPN información sobre las instancias de cada una de las SQL que se encuentran en el servidor de destino y proporciona varias opciones, como se indica a continuación. Use esta pestaña para buscar los SPN que faltan o están mal configurados y los botones Generar o Corregir para solucionar estos problemas.

      KerConfigManager_SPN

      • La opción Generar le permitirá crear el script de generación de SPN. Al hacer clic en el botón Generar, se inicia el siguiente cuadro de diálogo:

        KerConfigManager_GenerateSPN

        Esta opción crea un archivo cmd, que se puede ejecutar desde el símbolo del sistema para generar el SPN.

        El contenido de los generateSPN será similar al siguiente:

        :: This script is generated by the Microsoft(c) SQL Server(c) Kerberos Configuration Manager tool.
        :: The script may update the system information, SPN settings and Delegation configurations of a given server.
        :: SPN and Delegation configuration updates require Windows Domain Administrator permission to execute.
        :: A Domain Admin should review the configurations recommended by this tool and take appropriate actions to enable Kerberos authentication.
        :: Please contact Microsoft Support if Kerberos connection problem persists.
        :: The file is intended to be run in domain "<DomainName>.com"
        :: Corrections for MSSQLSvc/<HostName>.<DomainName>.com **SetSPN -s MSSQLSvc/<HostName>.<DomainName>.com UserName**
        

        Simplemente usa la opción SetSPN para crear un SPN en la cuenta de servicio para SQL Server.

      • La opción de corrección agregará el SPN siempre que tenga derecho a agregar el SPN y muestre la siguiente información sobre  herramientas: KerbConfigManager_Fix

        Nota

        La herramienta solo proporciona opciones de corrección y generación para instancias predeterminadas e instancias con nombre con puertos estáticos. Para las instancias con nombre que usan puerto dinámico, se recomienda cambiar de puertos dinámicos a estáticos o conceder los permisos necesarios para que la cuenta de servicio registre y desconscriba el SPN cada vez que se inicia el servicio. De lo contrario, tendrá que anular el registro y volver a registrar manualmente los SPN correspondientes cada vez que se inicia SQL servicio.

      • Pestaña Delegación: la pestaña identifica cualquier problema con la configuración de la cuenta de servicio para la delegación. Esto es especialmente útil para solucionar problemas de servidor vinculados. Por ejemplo, si los SPN se desasoyen correctamente, pero si sigue teniendo problemas con las consultas de servidor vinculadas, podría ser una indicación de que la cuenta de servicio no está configurada para delegar credenciales. Para obtener información adicional, consulte el tema Libros en línea en Configuración de servidores vinculados para delegación.

        KerbConfigManger_Delegation

  5. Una vez que corrija los SPN, vuelva a ejecutar la herramienta Kerberos Configuration Manager y asegúrese de que las pestañas SPN y Delegación ya no informan de ningún mensaje de error y vuelvan a intentar la conexión desde la aplicación.

Para obtener información adicional, revise los siguientes vínculos:

Si esto no resuelve el problema, pase a la sección Aún teniendo problemas.

Error de inicio de sesión para el usuario

Podría haber un error más específico. Seleccione el error exacto que recibe:

Error de inicio de sesión para el usuario "NT AUTHORITY\ANONYMOUS LOGON"

Hay al menos tres escenarios para este problema. Use la tabla siguiente para ir a través de cada escenario aplicable y realizar los pasos de resolución adecuados.

Causa potencial Resoluciones sugeridas
Escenarios de salto doble en la misma máquina: está intentando hacer un doble salto, pero se usan credenciales NTLM en lugar de Kerberos. Para escenarios de doble salto en el mismo equipo, agregue entradas del Registro DisableLoopbackCheck o BackConnectionHostNames según lo siguiente:
Escenarios de doble salto en varios equipos: el error podría producirse cuando se produce un error en las conexiones Kerberos debido a problemas de SPN. Pase a la sección: Solución de problemas de autenticación debido a problemas de Kerberos en la parte inferior para ver los detalles.
No hay doble salto implicado. Si no hay ningún salto doble implicado, también podría significar que hay SPN duplicados y el cliente se ejecuta como LocalSystem u otra cuenta de equipo que obtiene credenciales NTLM en lugar de credenciales Kerberos.

Pase a la sección: Solución de problemas de autenticación debido a problemas de Kerberos para diagnosticar y resolver problemas de SPN.
Es posible que la directiva de seguridad local de Windows se haya configurado para impedir que se use la cuenta de equipo para las cuentas locales que no estén configuradas. En Windows 2008 R2/Windows 7 y versiones posteriores, la directiva de seguridad local. Opciones de seguridad La seguridad de red se puede configurar para no usar la cuenta del equipo para las cuentas locales que se están apagando; usaría credenciales anónimas en su lugar.

Si esto no resuelve el problema, pase a la sección Aún teniendo problemas.

Error de inicio de sesión para el mensaje "(null)" del usuario

Esto significa que LSASS no pudo descifrar el token de seguridad con las SQL Server de la cuenta de servicio. La razón principal de esto es que el SPN está asociado con la cuenta incorrecta.

Para diagnosticar y resolver estos problemas de SPN, pase a la sección Solución de problemas de autenticación debido a problemas de Kerberos.

Error de inicio de sesión para el usuario está vacío

Por ejemplo, es posible que vea un error similar al siguiente:

Source: NETLOGON
Date: 8/12/2012 8:22:16 PM
Event ID: 5719
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: <computer name>
Description:This computer was not able to set up a secure session with a domain controller in domain due to the following: The remote procedure call was cancelled. This may lead to authentication problems. Make sure that this computer is connected to the network. If the problem persists, please contact your domain administrator.
Empty string means that SQL tried to hand-off the credentials to LSASS but there was some problem. Either LSASS was not available or the domain controller could not be contacted.
Check the event logs on the client and the server machines to see if there are any network or Active Directory related messages around the time of failure and if you do, work with your domain administrator to fix the issues.

Si esto no resuelve el problema, pase a la sección Aún teniendo problemas.

Error de inicio de sesión para el usuario ' <username> ' o error de inicio de sesión para el usuario ' <domain> \ <username>

Si no se especifica el nombre de dominio, se trata de un error SQL inicio de sesión. Si se especifica, se trata de un error Windows-Integrated inicio de sesión. Revise la tabla siguiente para ver las causas y las posibles soluciones.

Causa Pasos de resolución
La base de datos solicitada está fuera de línea o no está disponible. Compruebe los permisos y la disponibilidad de la base de datos SQL Server Management Studio.
El usuario no tiene permisos para la base de datos solicitada. Intente conectarse como otro usuario que tenga derechos sysadmin.

Para obtener sugerencias adicionales, revise Solución de problemas: Error de inicio de sesión para el usuario 'x'.

Si esto no resuelve el problema, pase a la sección Aún teniendo problemas.

Error de inicio de sesión para el usuario "<dominio\nombreDeEquipo$>"

También puede ver esto con las aplicaciones IIS que usan el inicio de sesión anónimo o el inicio de sesión del formulario donde la cuenta de usuario no está suplantada. La cuenta anónima de IIS (IUSR) o la cuenta del grupo de aplicaciones se suplantan en su lugar. La cuenta de IUSR es una cuenta local y la cuenta del grupo de aplicaciones también podría ser una cuenta local.

Este error suele ocurrir si el usuario ha iniciado sesión con una cuenta local en lugar de con una cuenta de dominio. Si se conecta a los servicios de forma predeterminada, es posible que se pasen las credenciales de la máquina. En algunos casos, puede agregar esta cuenta como un inicio de sesión en el servidor back-end. En otros casos, es posible que desee iniciar sesión con una cuenta de dominio y proporcionar los permisos adecuados a esa cuenta para acceder al servicio remoto.

Si esto no resuelve el problema, pase a la sección Aún teniendo problemas.

Comprobar los errores de tiempo de espera expirado

El error de tiempo de espera expirado representa uno o varios de los siguientes mensajes de error:

   Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
   System.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired.
   The timeout period elapsed while attempting to consume the pre-login handshake acknowledgment.
   This could be because the pre-login handshake failed or the server was unable to respond back in time.
   The duration spent while attempting to connect to this server was [Pre-Login] initialization=23; handshake=14979; ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out.
   System.Data.SqlClient.SqlException (0x80131904): Timeout expired.
   The timeout period elapsed prior to completion of the operation or the server is not responding.
   System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out.
   Connection Timeout Expired.
   The timeout period elapsed while attempting to consume the pre-login handshake acknowledgment.
   This could be because the pre-login handshake failed or the server was unable to respond back in time.
   The duration spent while attempting to connect to this server was [Pre-Login] initialization=21036; handshake=0; (Microsoft SQL Server, Error: -2).

Nota

El segundo y tercer mensaje de error se producen cuando se instala .Net Framework 4.5 o superior.

Puede empezar a solucionar problemas en la siguiente sección: Solución de problemas de mensajes expirados detiempo de espera.

Solución de problemas de mensajes expirados de tiempo de espera

Un tiempo de espera es cuando algo tarda más de lo permitido. Básicamente, estamos anulando lo que intentamos hacer para no esperar indefinidamente y, posiblemente, bloquear otras cosas y bloquear una aplicación. Desde una perspectiva de conectividad, en su forma básica, podemos verlo de dos maneras. Uno es un tiempo de espera de conectividad, el otro es un tiempo de espera de consulta. Por lo tanto, primero debe revisar la pila de llamadas completa del mensaje de error para determinar si se trata de un tiempo de espera de conexión o un tiempo de espera de comando.

Nota

Los valores predeterminados de estos parámetros que se pueden establecer a través del código, la cadena de conexión y otros métodos es el siguiente:

  • Tiempo de espera de conexión: 15 segundos
  • Consulta o tiempo de espera de comando: 30 segundos
  • Una pila de llamadas de tiempo de espera de conexión es similar a esta:

    System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
     at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
     at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
     at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
     at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
     at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt,Boolean trustServerCert, Boolean& marsCapable)
     at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnectionowningObject)
     at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfoserverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
     at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
     at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
     at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
     at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
     at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)  
    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
     at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
     at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
     at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
     at System.Data.SqlClient.SqlConnection.Open() <-- SqlConnection along with Open tells us that we are trying to open a connection. So, this is not related to a query.  
    
  • Un tiempo de espera de comando en .NET 2.0 Framework es similar a este:

    System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
     at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
     at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
     at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
     at System.Data.SqlClient.SqlDataReader.get_MetaData()
     at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
     at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
     at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
     at System.Data.SqlClient.SqlCommand.ExecuteScalar() <-- SqlCommand is used to work with a query, not a connection. ExecuteScalar is used to actually execute a query. You could also see other items like an ExecuteReader or ExecuteNonQuery for example.
    

Pasos de resolución: estos dos problemas pueden ser de entorno o SQL Server relacionados. Por ejemplo, podría ser que tiene una red lenta o que hay un problema de rendimiento de las consultas. No hay reglas estrictas y rápidas como lo que se podría hacer aquí y pueden ser necesarias más investigaciones sobre lo que podría estar causando el problema. Aumentar el tiempo de espera de consulta es mucho más común que aumentar el tiempo de espera de conexión. Esto se debe a que al intentar conectarse a un origen de datos, la conexión suele ocurrir rápidamente (normalmente en un intervalo de pocos milisegundos).

Tipo Pruebe lo siguiente:
Tiempo de espera de conexión
1. Aumente ConnectionTimout en la aplicación.
2. Compruebe si el puerto usado por SQL está bloqueado en la red con una herramienta como Portqry. Pase a usar la herramienta PortqryUI con SQL Server para obtener instrucciones sobre cómo usarla.
Tiempo de espera del comando
Aumente el valor de CommandTimeout en la aplicación y ajuste también las consultas que se ejecutan en el back-end.

Para obtener más sugerencias y sugerencias, consulte: Solución de problemas: Ha expirado el tiempo de espera.

Si esto no resuelve el problema, pase a la sección Aún teniendo problemas.

El período de tiempo de espera transcurrido antes de obtener una conexión del grupo de servidores

Normalmente se produce si las conexiones no se cierran correctamente y el error completo puede tener el siguiente aspecto:

System.InvalidOperationException: ha expirado el tiempo de espera. El período de tiempo de espera transcurrido antes de obtener una conexión del grupo.

Esto puede haber ocurrido porque todas las conexiones agrupadas estaban en uso y se alcanzó el tamaño máximo del grupo. Normalmente, esto se puede evitar si el tiempo de espera expira. El período de tiempo de espera transcurrido antes de obtener una conexión del grupo de servidores.

Si esto no resuelve el problema, pase a la sección Aún teniendo problemas.

Conectarse SQL servidor mediante un archivo UDL

Para obtener más información acerca de cómo probar las conexiones a SQL Server mediante un archivo de vínculo de datos universal, vea las siguientes conexiones de prueba a SQL Server mediante una sección de archivo de vínculo de datos universal.

Los archivos UDL proporcionan una forma fácil y eficaz de probar las conexiones a SQL servidor desde sus clientes u otros sistemas.

  1. Habilita la opción para mostrar extensiones de archivo en el explorador de Windows. Para ello:

    1. En Windows 8 y sistemas posteriores: ve a Opciones del Explorador de archivos en el Panel de control o simplemente escribe Ocultar en la búsqueda de Windows y, en la pestaña Ver, desactiva Ocultar extensiones para tipos de archivo conocidos.

    2. Windows 7 y versiones anteriores:

      Win7ViewExtFile

  2. Navegue a la carpeta donde desea crear el archivo de vínculo de datos universal (.udl) (por ejemplo, c:\temp)

  3. Cree un nuevo archivo de texto (sqlconn.txt) y cambie el nombre de la extensión de .txt a .udl. (Haga clic en Sí en el mensaje de advertencia sobre cómo cambiar la extensión del nombre de archivo)

  4. Haga doble clic en el archivo .udl del paso 3 y haga lo siguiente:

    1. En la pestaña Proveedor, seleccione el proveedor que está usando en la aplicación (por ejemplo, SQL Server Native Client)
    2. En la pestaña Conexión, seleccione o escriba el SQL Server y el resto de los parámetros según sea pertinente para la aplicación.
  5. A continuación, haga clic en Probar conexión.

Para obtener más información y capturas de pantalla, consulta la siguiente entrada de blog en MSDN:
Conceptos básicos en primer lugar: "Prueba UDL"

Si esto no resuelve el problema, pase a la sección Aún teniendo problemas.

Seguir teniendo problemas

Lamentamos que esta guía no haya solucionado su problema. Le recomendamos que vaya a microsoft SQL Community para obtener ayuda. Aquí presentamos algunos recursos adicionales que podrían resultarle útiles: