Protocoles réseau et points de terminaison TDS

Lorsque le moteur de base de données SQL Server communique avec une application, il agence les données dans un format de communication Microsoft appelé paquet de flux de données tabulaire (TDS, Tabular Data Stream). La couche de protocole réseau SQL Server Network Interface (SNI) qui remplace les Net-Library de SQL Server 2000 et Microsoft Data Access Components (MDAC) encapsule le paquet TDS dans un protocole de communication standard, tel que TCP/IP ou les canaux nommés. La couche de protocole SNI est un composant commun du moteur de base de données et de SQL Server Native Client. La couche de protocole SNI n'est pas directement configurée. En fait, le serveur et SQL Server Native Client sont configurés de manière à utiliser un protocole réseau. Le moteur de base de données et le SQL Server Native Client utilisent ensuite automatiquement les paramètres de protocole appropriés. Le serveur, lui, crée un objet SQL Server s'appelant point de terminaison TDS pour chaque protocole réseau. Sur le serveur, les points de terminaison TDS sont installés par SQL Server lors de l'installation de SQL Server.

Cette rubrique décrit comment le serveur crée et utilise les points de terminaison TDS. Pour plus d'informations sur la façon de configurer le serveur, consultez Configuration des bibliothèques réseau et des protocoles réseau du serveur.

Sur l'ordinateur client, vous devez installer SQL Server Native Client et le configurer pour utiliser un protocole réseau activé sur le serveur. Pour plus d'informations sur les clients, consultez Configuration des protocoles réseau client.

Activation des protocoles serveur après l'installation

Les protocoles réseau (tel que TCP/IP) du système d'exploitation sous-jacent doivent être installés aussi bien sur le client que sur le serveur. Les protocoles réseau sont généralement installés lors de l'installation de Windows ; leur installation ne fait pas partie de l'installation de SQL Server. Si le protocole réseau n'est pas disponible et configuré sur le serveur, le moteur de base de données ne démarre pas. Si le protocole réseau n'est pas disponible et configuré sur le client, la bibliothèque réseau ne fonctionne pas.

Notes

En ce qui concerne le reste de cette rubrique, « l'activation d'un protocole » se réfère à l'activation du protocole pour SQL Server et non pour le système d'exploitation.

Les protocoles réseau nécessaires pour communiquer avec SQL Server à partir d'un autre ordinateur ne sont souvent pas activés pour SQL Server lors de l'installation. Par conséquent, pour vous connecter à partir d'un ordinateur client, vous devrez peut-être activer le protocole TCP/IP, les canaux nommés ou le protocole VIA. (le protocole de mémoire partagée est activé par défaut sur toutes les installations mais ne peut être utilisé que pour se connecter au moteur de base de données à partir d'une application cliente située sur le même ordinateur). Pour plus d'informations sur les protocoles réseau qui sont activés pour votre type d'installation, consultez Configuration réseau par défaut de SQL Server.

Pour activer les protocoles réseau, utilisez le Gestionnaire de configuration SQL Server. Une autre méthode permet d'activer les protocoles lors de l'installation à l'aide d'options à l'invite de commandes. Pour plus d'informations, consultez Procédure : installer SQL Server 2008 R2 à partir de l'invite de commandes.

Une fois les connexions réseau installées et configurées, SQL Server peut être simultanément à l'écoute de toute combinaison des protocoles réseau installés sur le serveur.

Définition des points de terminaison TDS

Un point de terminaison TDS désigne l'objet SQL Server qui représente le point de communication entre SQL Server et un client. SQL Server crée automatiquement un point de terminaison pour chacun des quatre protocoles pris en charge par SQL Server. Par défaut, tous les utilisateurs y ont accès lorsque les protocoles sont activés. Si un protocole réseau n'est pas activé, le point de terminaison existe bien mais ne peut tout simplement pas être utilisé. Un point de terminaison supplémentaire est créé pour la connexion DAC (Dedicated Administrator Connection) réservée aux administrateurs, c'est-à-dire aux membres faisant partie du rôle serveur fixe sysadmin.

SQL Server génère un nom unique pour chaque point de terminaison TDS. Les points de terminaison automatiquement créés sont présentés dans le tableau suivant :

Protocole

Nom du point de terminaison

Mémoire partagée

TSQL LocalMachine

Canaux nommés

TSQL Named Pipes

TCP/IP

TSQL Default TCP

VIA

TSQL Default VIA

DAC

Dedicated Admin Connection

HTTP

Protocole de transport hypertexte

Dans le cas des canaux nommés et des protocoles de mémoire partagée, vous ne pouvez disposer que d'un seul point de terminaison par instance. Ces types de protocoles ne possèdent aucun point de terminaison configurable. Dans le cas du TCP/IP et de VIA, un point de terminaison est créé par défaut mais d'autres peuvent être ajoutés. Les points de terminaison HTTP sont également créés par l'utilisateur et n'apparaissent pas dans le Gestionnaire de configuration SQL Server.

Important

Le protocole VIA est déconseillé. Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

Seuls le propriétaire et l'état peuvent être modifiés sur les points de terminaison système (via l'instruction ALTER ENDPOINT). Vous ne pouvez pas désactiver les points de terminaison définis par défaut mais vous pouvez toujours les arrêter et les relancer. Un point de terminaison arrêté continue d'écouter le réseau, mais il rejette puis ferme dans ce cas les nouvelles connexions qui s'établissent.

Notes

Par défaut, les clients sont configurés pour essayer tous les protocoles disponibles jusqu'à ce que l'un d'entre eux fonctionne. Si le protocole TCP/IP est désactivé, les clients continuent en passant au protocole suivant. Si TCP/IP est activé alors que le point de terminaison est arrêté, la tentative de connexion n'est pas rejetée, évitant ainsi que le client essaie d'autres protocoles, mais la connexion arrêtée ne peut pas être utilisée. Dans ce cas, vous devez vous connecter de façon explicite à un point de terminaison actif.

Les ports TCP dynamiques se connectent généralement au point de terminaison TCP par défaut.

Paramètres des protocoles conservés dans le Registre

Les paramètres régissant les points de terminaison TDS sont conservés dans le Registre. Les utilisateurs doivent passer par des instructions Transact-SQL pour créer ou modifier ces points de terminaison, et par le Gestionnaire de configuration SQL Server pour activer ou désactiver des protocoles, ce qui démarre et arrête les points de terminaison.

Si l'utilisateur modifie les paramètres de protocole directement dans le Registre, cela n'a aucune incidence sur le comportement du protocole. En effet, le Registre reste séparé des métadonnées.

Association d'une connexion utilisateur à un point de terminaison

Lors de la connexion au moteur de base de données, SQL Server associe la connexion à un point de terminaison précis et détermine si la connexion active dispose des autorisations appropriées pour utiliser ce point de terminaison. Les connexions sont associées comme suit :

  • Les connexions de mémoire partagée utilisent le point de terminaison TSQL LocalMachine.

  • Les connexions de canaux nommés utilisent le point de terminaison TSQL Named Pipes.

  • Les connexions administrateur dédiées se servent du point de terminaison Dedicated Admin Connection.

  • Par défaut, les connexions TCP se basent sur le point de terminaison TSQL Default TCP. Si un nouveau point de terminaison TCP (défini par l'utilisateur) est créé pour un port TCP précis, les connexions se connectant au port TCP se font donc à ce nouveau point de terminaison. Si un nouveau point de terminaison TCP/TSQL est créé avec IP_ANY pour port, les connexions TCP se font alors à ce nouveau point de terminaison.

  • Les connexions VIA sont traitées de la même façon que les connexions TCP.

Les points de terminaison définis par l'utilisateur se comportent de la même manière que les points de terminaison par défaut. Si un point de terminaison est créé pour une adresse IP (ou pour toutes les adresses IP, en utilisant IP_ANY) et pour un port TCP donné, l'autorisation de se connecter à ce point de terminaison est accordée aux utilisateurs dans un processus appelé approvisionnement. Ils conservent l'approvisionnement, que le serveur écoute ou non sur la combinaison adresse IP/port TCP. Une connexion à une adresse IP et à un port TCP est mise en équivalence à un point de terminaison dans l'ordre suivant :

  1. Si l'adresse IP et le port TCP correspondent exactement à l'adresse IP et au port TCP d'un point de terminaison, le point est alors utilisé.

  2. Si la correspondance n'est pas exacte, le port TCP fait l'objet d'une vérification par rapport à tous les points de terminaison créés à l'aide de IP_ANY, puis, si le port TCP est répertorié, son point de terminaison équivalent est utilisé.

  3. Si aucun port ne correspond exactement, le point de terminaison TCP par défaut est utilisé.

Le processus d'association de connexions entraîne toujours la sélection d'au plus un point de terminaison. L'autorisation de se connecter est alors vérifiée pour ce point. Si l'utilisateur ne bénéficie pas de l'accès à ce point, le processus ne recherche pas le point de terminaison suivant.

Exemples : association des connexions utilisateurs et des points de terminaison

L'exemple ci-dessous illustre l'utilisation de l'adresse IP et du port TCP pour sélectionner un point de terminaison. Partons du principe que le serveur est configuré pour écouter l'adresse IP et le port TCP suivants :

127.0.0.1:1533

Supposons également que les points de terminaison TCP suivants sont établis :

Nom du point de terminaison

Valeurs configurées

Loopback

LISTENER_IP= 127.0.0.1 et LISTENER_PORT = 1533

Remote

LISTENER_IP = ALL et LISTENER_PORT = 1533

TSQL Default TCP

Lié à aucune adresse IP ni à aucun port

Ainsi, trois connexions sont possibles :

  • Si un client établit une connexion TCP à 127.0.0.1:1533, le point de terminaison associé à la session correspond alors au point de terminaison Loopback, car l'adresse IP et le port TCP correspondent exactement au point de terminaison Loopback.

  • Si un client établit une connexion TCP à 251.40.20.151:1533, l'adresse IP et le port TCP ne correspondent pas exactement à un point de terminaison, mais Remote est disponible vis-à-vis de la connexion car Remote écoute sur toutes les adresses IP ainsi que le port 1533. Si la connexion en cours ne dispose pas des autorisations nécessaires sur le point de terminaison Remote, le processus échoue. Elle n'essaie pas de se connecter aux autres points de terminaison possibles, tels que TSQL Default TCP, pour lesquels elle pourrait bénéficier d'autorisations.

  • Si un client établit une connexion TCP à 251.40.20.151:1433, l'adresse IP et le port TCP ne correspondent pas exactement à un point de terminaison et le port TCP 1533 ne correspond pas non plus à une adresse IP, mais TSQL Default TCP est disponible vis-à-vis de la connexion car TSQL Default TCP écoute sur toutes les adresses IP et tous les ports.

Mise à niveau et/ou installation

Par défaut, tous les utilisateurs ont accès aux points de terminaison TDS (sauf les points de terminaison des connexions administrateur dédiées). Puisque ces points sont créés de façon interne par le serveur, ils ne possèdent aucun propriétaire et vous ne pouvez pas les associer à un compte donné.

Gestion des points de terminaison avec Transact-SQL

Les points de terminaison sont créés et gérés à l'aide de Transact-SQL. Plus précisément, ils sont créés et supprimés par le biais des instructions respectives CREATE ENDPOINT et DROP ENDPOINT. Il existe également des instructions pour contrôler, modifier et s'approprier des points de terminaison.

Pour se connecter à une instance de SQL Server par le biais de points de terminaison Transact-SQL, les utilisateurs doivent bénéficier de l'autorisation CONNECT relative à un point de terminaison ainsi que de l'autorisation globale dans SQL Server pour pouvoir ouvrir une session. L'autorisation de se connecter aux points de terminaison par défaut est accordée de manière implicite aux utilisateurs lors de la création des connexions. L'accès aux points de terminaison est géré par les instructions GRANT | DENY | REVOKE CONNECT ON ENDPOINT.

Lorsqu'un point de terminaison TCP est créé, SQL Server révoque automatiquement toutes les autorisations existantes sur le point de terminaison TSQL Default TCP. Pour obtenir un exemple montrant comment créer un nouveau point de terminaison TCP, consultez Procédure : configurer le moteur de base de données de manière à écouter sur plusieurs ports TCP.

  • Pour restreindre l'accès à un point de terminaison, l'administrateur peut refuser l'autorisation au groupe EVERYONE (correspond à « tout le monde ») par le biais de l'instruction DENY CONNECT, puis accorder l'autorisation d'accès à des individus ou des rôles donnés grâce à l'instruction GRANT CONNECT.

  • Pour revenir à l'état d'origine des autorisations, accordez une autorisation de connexion (GRANT CONNECT) au groupe PUBLIC.

  • Pour indiquer un point de terminaison à une application précise, refusez les autorisations de connexion (DENY CONNECT) à tous les utilisateurs sauf à ceux de l'application en question.

Remarque relative à la sécuritéRemarque relative à la sécurité

L'autorisation d'utiliser un point de terminaison est associée au nom du point. Si le nom du point de terminaison change, les restrictions de sécurité (par exemple, les instructions DENY CONNECT) ne s'appliquent plus correctement. Le nom d'un point de terminaison est modifié lors du changement de port. Si SQL Server écoute sur des ports dynamiques, le port peut alors changer entraînant le changement du nom du point de terminaison et la suppression des autorisations associées au point. Pour éviter ce genre de risque pour la sécurité, ne définissez jamais d'autorisation personnalisée à des points de terminaison associés à des ports dynamiques ; ne modifiez pas non plus l'ordre dans lequel un point de terminaison TCP/IP est défini dans le Registre.

Pour plus d'informations sur la définition de la sécurité des points de terminaison, consultez GRANT – octroi d'autorisations de point de terminaison (Transact-SQL).