SQL Server clientes pueden cambiar los protocolos cuando los equipos cliente intentan conectarse a una instancia de SQL Server

En este artículo se presenta SQL Server clientes pueden cambiar los protocolos cuando los equipos cliente intentan conectarse a una instancia de SQL Server.

Versión del producto original: SQL Server
Número de KB original: 328383

Resumen

Los equipos cliente que tienen componentes de Microsoft Data Access (MDAC) versión 2.6 o posteriores pueden probar varios protocolos o mecanismos de comunicación entre procesos (IPC) para establecer conexiones a SQL Server.

Más información

Se ha realizado una mejora en la biblioteca de red del lado cliente, Dbnetlib.dll para MDAC versión 2.6 y versiones posteriores. Con MDAC versión 2.6 y versiones posteriores, si hay varios protocolos disponibles y se produce un error en un intento de conexión con el primer protocolo, la aplicación cliente intenta usar inmediatamente uno de los otros protocolos.

De forma predeterminada, los clientes tienen TCP y canalizaciones con nombre como protocolos disponibles. Puede manipular la ordenación de protocolos mediante la utilidad cliente de SQL Server. La aplicación cliente usa los protocolos en el orden especificado en el equipo cliente. El orden del protocolo se almacena en la siguiente ubicación de clave del Registro en el valor ProtocolOrder:

HKLM\Software\Microsoft\MSSQLServer\Client\SuperSocketNetLib

Si usa SQL Server 2005, el orden del protocolo se almacena en la entrada del Registro ProtocolOrder en la siguiente subclave del Registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI<version>

Por ejemplo, si un equipo cliente tiene tcp y canalizaciones con nombre disponibles, y el orden es:

  • TCP
  • Canalizaciones

Cuando el equipo cliente intenta realizar una conexión TCP con el servidor y el intento de conexión devuelve un código devuelto distinto de cero, el cliente intenta una conexión de forma transparente mediante el siguiente protocolo de la lista, que es Canalizaciones con nombre. En este escenario, el cliente no puede realizar una conexión TCP; sin embargo, el cliente realiza correctamente una conexión canalizaciones con nombre.

Nota:

El cliente no recibe un error que indique que se produjo un error en el primer protocolo.

Si la aplicación cliente usa el segundo protocolo y también devuelve un error, se devuelve un error al cliente.

Si crea un alias mediante uno de los métodos siguientes, la aplicación cliente usa la información de alias para establecer una conexión con el servidor y no usa ningún protocolo adicional.

  • Mediante el uso de la utilidad SQL Server Client Network
  • Mediante el uso de Administrador de configuración de SQL Server
  • Al crear un nombre de origen de datos ODBC (DSN)

Si desea controlar el protocolo que usa una aplicación cliente para cada intento de conexión y no permitir que el cliente pruebe varios protocolos, puede hacer lo siguiente:

  • Use la utilidad de red de cliente SQL o Administrador de configuración de SQL Server para crear un alias especificando el protocolo que prefiera.

  • Especifique el protocolo en el cadena de conexión. Por ejemplo:

    DSN=DSNName;SERVER=servername;DATABASE=YourDataBaseName;Network=DBMSSOCN;Address=IP_Address,1433;UID=YourUID;PWD=YourPassword;
    

    En este ejemplo, especifique el protocolo de red como DBMSSOCN, lo que significa que quiere usar el protocolo TCP/IP. Si especifica el protocolo dentro de la cadena de conexión, Dbnetlib solo usa el protocolo especificado y no prueba ningún otro protocolo. De forma similar, para habilitar solo el protocolo de canalización con nombre, use una cadena de conexión similar a esta:

    DSN=DSNName;SERVER=servername;DATABASE=YourDataBaseName;Network=DBNMPNTW;Address=\\.\pipe\sql\query;UID=YourUID;PWD=YourPassword;
    
  • Use la utilidad Red de cliente para quitar otros protocolos.

REFERENCIAS

Resolución de errores de conectividad en SQL Server