Protocolos de red y extremos TDS

Cuando el SQL Server Database Engine (Motor de base de datos de SQL Server) se comunica con una aplicación, asigna a la comunicación un formato denominado paquete de secuencia de datos tabular (TDS) de Microsoft. La capa del protocolo de interfaz de red de SQL Server (SNI), que reemplaza las bibliotecas de red por SQL Server 2000 y Microsoft Data Access Components (MDAC), encapsula el paquete TDS dentro de un protocolo de comunicación estándar, como TCP/IP o canalizaciones con nombre. La capa del protocolo SNI es común a Motor de base de datos y a SQL Server Native Client. La capa del protocolo SNI no se configura directamente. En su lugar, el servidor y SQL Server Native Client se configuran para utilizar un protocolo de red. A continuación, Motor de base de datos y SQL Server Native Client aplican automáticamente la configuración apropiada del protocolo. El servidor crea un objeto de SQL Server llamado extremo TDS para cada protocolo de red. En el servidor, SQL Server instala los extremos TDS durante la instalación de SQL Server.

Este tema describe cómo crea y utiliza el servidor los extremos TDS. Para obtener más información acerca de cómo configurar el servidor, vea Configurar protocolos y bibliotecas de red de servidores de red.

En el equipo cliente, SQL Server Native Client debe instalarse y configurarse para que utilice un protocolo de red habilitado en el servidor. Para obtener más información acerca de los clientes, vea Configurar protocolos de red de cliente.

Habilitar protocolos de servidor después de la instalación

Los protocolos de red subyacentes del sistema operativo (como TCP/IP) deberían estar instalados en el cliente y el servidor. Normalmente, los protocolos de red se instalan durante la instalación de Windows; no forman parte de la instalación de SQL Server. Si el protocolo de red necesario no está disponible ni configurado en el servidor, Motor de base de datos no se iniciará. Si el protocolo de red necesario no está disponible ni configurado en el cliente, la biblioteca de red no funcionará.

Nota

De aquí en adelante, "habilitar un protocolo" quiere decir habilitarlo para SQL Server, no para el sistema operativo.

Los protocolos de red necesarios para comunicarse con SQL Server desde otro equipo a menudo no se habilitan para SQL Server durante la instalación. Por tanto, para conectarse desde un equipo cliente, es posible que tenga que habilitar los protocolos TCP/IP, canalizaciones con nombre o VIA. El protocolo de memoria compartida se habilita de forma predeterminada en todas las instalaciones, pero sólo puede utilizarse para conectar con el Motor de base de datos desde una aplicación cliente en el mismo equipo. Para obtener información acerca de los protocolos de red que están habilitados para su tipo de instalación, vea Configuración de red de SQL Server predeterminada.

Para habilitar los protocolos de red, use el Administrador de configuración de SQL Server. Los protocolos también pueden habilitarse durante la instalación utilizando opciones en el símbolo del sistema. Para obtener más información, vea Instalar SQL Server 2008 R2 desde el símbolo del sistema.

Una vez instaladas y configuradas las conexiones de red, SQL Server puede escuchar simultáneamente en cualquier combinación de protocolos de red del servidor.

Definición de los extremos TDS

Un extremo TDS es el objeto de SQL Server que representa el punto de comunicación entre SQL Server y un cliente. SQL Server crea de forma automática un extremo para cada uno de los cuatro protocolos admitidos por SQL Server. De forma predeterminada, todos los usuarios tienen acceso a los protocolos cuando están habilitados. Si un protocolo de red no está habilitado, el extremo se mantiene, pero no puede utilizarse. Para la conexión de administrador dedicada (DAC), se creará un extremo adicional que sólo pueden utilizar los miembros del rol fijo de servidor sysadmin.

SQL Server genera un nombre único para cada extremo TDS. La tabla siguiente muestra los extremos que se crean automáticamente.

Finalidad

Nombre del extremo

Memoria compartida

TSQL LocalMachine

Canalizaciones con nombre

TSQL Named Pipes

TCP/IP

TSQL Default TCP

VIA

TSQL Default VIA

DAC

Dedicated Admin Connection

HTTP

HyperText Transport Protocol

Para los protocolos de canalizaciones con nombre y memoria compartida, sólo puede existir un extremo por instancia. Para estos tipos de protocolo, no existen extremos configurables. Para TCP/IP y VIA, existe un extremo predeterminado, pero se pueden crear extremos adicionales. Los extremos HTTP también son creados por el usuario y no aparecen en el Administrador de configuración de SQL Server.

Nota importanteImportante

El protocolo VIA está desusado. Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

En los extremos del sistema, solo se puede cambiar el propietario y el estado (mediante ALTER ENDPOINT). Los extremos predeterminados no pueden deshabilitarse, pero pueden detenerse e iniciarse. Un extremo que se ha detenido sigue escuchando, pero rechaza y cierra las conexiones nuevas.

Nota

De forma predeterminada, los clientes se configuran para probar todos los protocolos hasta que uno funcione. Si el protocolo TCP/IP está deshabilitado, los clientes continúan con el siguiente protocolo. Si TCP/IP está habilitado pero el extremo se ha detenido, no se rechazará el intento de conexión y el cliente no probará otros protocolos, pero no se podrá utilizar la conexión que se ha detenido. En este caso, debe conectarse explícitamente a un extremo activo.

Los puertos TCP dinámicos normalmente se conectan al extremo TCP predeterminado.

Configuración del protocolo en el Registro

La configuración para los extremos TDS se graba en el Registro. Los usuarios deben utilizar instrucciones Transact-SQL para crear o modificar extremos, y deben utilizar el Administrador de configuración de SQL Server para habilitar y deshabilitar protocolos, lo que permite iniciar y detener los extremos.

Cuando el usuario cambia la configuración del protocolo en el Registro, no sucede nada. El Registro está separado de los metadatos.

Asociar una conexión de usuario con un extremo

Al conectarse a Motor de base de datos, SQL Server asocia la conexión con un extremo específico y evalúa si el inicio de sesión que se conecta tiene permiso para utilizar el extremo. Las conexiones se asocian del modo siguiente:

  • Las conexiones de memoria compartida utilizan el extremo TSQL LocalMachine.

  • Las conexiones de las canalizaciones con nombre utilizan el extremo TSQL Named Pipes.

  • La conexiones de administrador dedicadas utilizan el extremo Dedicated Admin Connection.

  • Las conexiones TCP utilizan el extremo TSQL Default TCP de forma predeterminada. Si se crea un extremo TCP nuevo (definido por el usuario) para un puerto TCP específico, las conexiones a dicho puerto TCP se conectarán al nuevo extremo. Si un nuevo extremo TCP/TSQL se crea utilizando IP_ANY como puerto, las conexiones TCP se conectarán al extremo nuevo.

  • Las conexiones VIA se tratan del mismo modo que las TCP.

Los extremos definidos por el usuario se comportan del mismo modo que los extremos predeterminados. Cuando se crea un extremo para una dirección IP (o todas las direcciones IP utilizando IP_ANY) y un puerto TCP específico, el permiso para conectarse al extremo se otorga a los usuarios en un proceso denominado puesta en servicio. Ellos retienen la puesta en servicio independientemente de si el servidor está escuchando o no en la combinación dirección IP/puerto TCP. La conexión a una dirección IP y un puerto TCP se asocia a un extremo en el orden que se indica a continuación:

  1. Si la dirección IP y el puerto TCP coinciden exactamente con la dirección IP y el puerto TCP de un extremo, se utilizará dicho extremo.

  2. Si no existe una correspondencia exacta, el puerto TCP se comprobará en todos los extremos IP_ANY y si aparece enumerado, se utilizará el extremo que lo enumere.

  3. Si no existe una correspondencia de puerto exacta, se utilizará el extremo TCP predeterminado.

El proceso de asociación de conexión siempre da lugar a la selección de un único extremo como máximo. El permiso para conectarse se comprueba para dicho extremo. Si el usuario no tiene permiso para dicho extremo, el proceso no buscará el extremo.

Ejemplos: asociar extremos y conexiones de usuario

En el ejemplo siguiente se muestra cómo se utilizan la dirección IP y el puerto TCP para seleccionar un extremo. Suponga que el servidor se ha configurado para escuchar en las siguientes direcciones IP y puertos TCP:

127.0.0.1:1533

Suponga también que se han establecido los siguientes extremos TCP:

Nombre del extremo

Valores configurados

Loopback

LISTENER_IP= 127.0.0.1 y LISTENER_PORT = 1533

Remote

LISTENER_IP = ALL y LISTENER_PORT = 1533

TSQL Default TCP

No vinculado a ninguna dirección IP ni puerto

Existen tres conexiones posibles:

  • Si un cliente realiza una conexión TCP a 127.0.0.1:1533, el extremo asociado con la sesión sería Loopback porque existe una correspondencia exacta de la dirección IP y el puerto TCP con el extremo Loopback.

  • Si un cliente realiza una conexión TCP a 251.40.20.151:1433, no habrá correspondencia exacta de la dirección IP y el puerto TCP con un extremo, pero Remote estará disponible para la conexión porque Remote escucha en todas las direcciones IP y en el puerto 1533. Si el inicio de sesión que se conecta no tiene permiso para el extremo Remote, el proceso da error. No intentará conectarse a otros extremos, como, por ejemplo, TSQL Default TCP, para los que el inicio de sesión pueda tener permisos.

  • Si un cliente realiza una conexión TCP a 251.40.20.151:1433, no habrá correspondencia exacta de la dirección IP y el puerto TCP con un extremo ni habrá correspondencia para el puerto TCP 1533 con una dirección IP, pero TSQL Default TCP estará disponible para la conexión porque TSQL Default TCP escucha en todas las direcciones IP y todos los puertos.

Actualizar y/o instalar

De forma predeterminada, todos los usuarios tienen acceso a los extremos TDS (salvo el extremo de la conexión de administrador dedicada). Dado que estos extremos son creados internamente por el servidor, no tienen propietario y no es posible asociarlos con una cuenta específica.

Administrar extremos con Transact-SQL

Los extremos se crean y se administran por medio de Transact-SQL. Se crean y quitan con las instrucciones CREATE ENDPOINT y DROP ENDPOINT, respectivamente. También existen instrucciones para controlar, modificar y obtener la propiedad de los extremos.

Para conectarse a una instancia de SQL Server mediante extremos de Transact-SQL, los usuarios deben tener el permiso CONNECT para un extremo y permiso global en SQL Server para iniciar sesión. El permiso para conectarse a extremos predeterminados se otorga de forma implícita a los usuarios al crear los inicios de sesión. El acceso a los extremos se administra con GRANT | DENY | REVOKE CONNECT ON ENDPOINT.

Cuando se crea un nuevo extremo TCP, SQL Server revoca automáticamente todos los permisos existentes en el extremo TSQL Default TCP. Para ver un ejemplo de cómo crear un extremo TCP nuevo, vea Cómo configurar el motor de base de datos para escuchar en varios puertos TCP.

  • Para restringir el acceso a un extremo, el administrador puede denegar el permiso al grupo EVERYONE (utilizando la instrucción DENY CONNECT) y, a continuación, otorgar el permiso a individuos específicos o roles (utilizando la instrucción GRANT CONNECT).

  • Para devolver los permisos a su estado original, conceda el permiso al grupo PUBLIC mediante GRANT CONNECT.

  • Para proporcionar un extremo a una aplicación específica, deniegue el permiso a todos los usuarios mediante DENY CONNECT, salvo a los usuarios de dicha aplicación.

Nota de seguridadNota de seguridad

La autorización para utilizar un extremo está asociada al nombre de dicho extremo. Si el nombre de un extremo cambia, las restricciones de seguridad (por ejemplo, las instrucciones DENY CONNECT) dejarán de aplicarse correctamente. El nombre de un extremo cambia al cambiar el puerto. Si SQL Server está escuchando en puertos dinámicos, el puerto puede cambiar, lo que cambiará el nombre del extremo y quitará los permisos de extremo asociados. Para evitar estos riesgos en la seguridad, no establezca permisos personalizados en extremos asociados a puertos dinámicos ni cambie el orden de un extremo TCP/IP en el Registro.

Para obtener más información acerca de cómo configurar la seguridad para los extremos, vea GRANT (permisos de extremo de Transact-SQL).