{"id":948,"date":"2013-10-07T15:56:27","date_gmt":"2013-10-07T13:56:27","guid":{"rendered":"http:\/\/www.sqlserver.fr\/blog\/?p=948"},"modified":"2020-09-01T10:06:57","modified_gmt":"2020-09-01T08:06:57","slug":"connexion-a-une-instance-nommee","status":"publish","type":"post","link":"https:\/\/www.sqlserver.fr\/blog\/connexion-a-une-instance-nommee\/","title":{"rendered":"Connexion \u00e0 une instance nomm\u00e9e"},"content":{"rendered":"<p>SQL Server permet l&rsquo;installation de plusieurs moteurs de bases de donn\u00e9es sur un m\u00eame syst\u00e8me d&rsquo;exploitation. Le terme consacr\u00e9 pour d\u00e9crire ces moteurs install\u00e9s est \u00ab\u00a0instance\u00a0\u00bb.<\/p>\n<p>Cet article a pour objet de voir les bonnes pratiques pour se connecter \u00e0 une instance SQL Server dans un contexte d&rsquo;entreprise, et plus pr\u00e9cis\u00e9ment dans le cas o\u00f9 l&rsquo;on a un pare-feu \u00e0 traverser.<!--more--><\/p>\n<p>Pour rappel, un syst\u00e8me d&rsquo;exploitation Windows peut h\u00e9berger un certain nombre d&rsquo;instances SQL Server (la limite est par exemple \u00e0 50 instances SQL Server 2012). Ces instances peuvent \u00eatre de versions SQL diff\u00e9rentes (simple variation de quelques hotfix ou services packs, ou bien m\u00eame potentiellement avec num\u00e9ro de version majeure diff\u00e9rent), ou bien avoir des propri\u00e9t\u00e9s diff\u00e9rentes (classement, droits d&rsquo;acc\u00e8s, &#8230;). D&rsquo;une mani\u00e8re g\u00e9n\u00e9rale, on peut consid\u00e9rer que ce sont plusieurs moteurs de bases de donn\u00e9es totalement ind\u00e9pendants. A noter que cet article se limitera \u00e0 parler du moteur de bases de donn\u00e9es relationnelles, et n&rsquo;abordera volontairement pas les autres briques SQL Server supportant la notion d&rsquo;instance (notamment SSRS et SSAS).<\/p>\n<p>Toutes ces instances ont un nom, permettant de les identifier sur le syst\u00e8me. Il peut toutefois y en avoir une (et une seule au maximum) qui n&rsquo;a pas de nom particulier d\u00e9fini. Elle est dite instance par d\u00e9faut, et porte en fait le nom MSSQLSERVER.<\/p>\n<p>Du point de vue des \u00e9changes avec l&rsquo;ext\u00e9rieur, ces instances SQL Server sont en g\u00e9n\u00e9ral param\u00e9tr\u00e9es pour r\u00e9pondre aux sollicitations ext\u00e9rieures sur la base de communications \u00e9tablies par TCI\/IP. Chaque instance r\u00e9pondra sur un port TCP qui lui sera propre.<\/p>\n<p>La d\u00e9finition par d\u00e9faut de ce port est la suivante :<\/p>\n<p>&#8211; pour l&rsquo;instance par d\u00e9faut, port TCP 1433<\/p>\n<p>&#8211; pour les autres instances (c&rsquo;est-\u00e0-dire les instances nomm\u00e9es), le port TCP est par d\u00e9faut attribu\u00e9 de mani\u00e8re dynamique au lancement de l&rsquo;instance.<\/p>\n<p>Le param\u00e9trage indiqu\u00e9 ci-dessus est celui en place par d\u00e9faut, mais il est tout \u00e0 fait configurable via l&rsquo;outil de configuration SQL Server (et nous verrons plus bas dans cet article pourquoi modifier cette configuration par d\u00e9faut). Pour d\u00e9finir le port de r\u00e9ponse d&rsquo;une instance, il faut aller dans le r\u00e9glage des param\u00e8tres r\u00e9seau de l&rsquo;instance, et demander les propri\u00e9t\u00e9s associ\u00e9es au protocole TCP\/IP.<\/p>\n<p><a href=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/08\/TCPIP_Properties.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"TCPIP_Properties\" src=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/08\/TCPIP_Properties-620x458.png\" width=\"620\" height=\"458\" \/><\/a><\/p>\n<p>On peut choisir soit une attribution dynamique du port, soit un port fixe.<\/p>\n<p>Dans le cas d&rsquo;une architecture technique classique d&rsquo;entreprise, il est assez fr\u00e9quent que les serveurs SQL soient prot\u00e9g\u00e9s par un pare-feu (et soient par exemple interrog\u00e9s par des serveurs Web plac\u00e9s en DMZ). Afin de configurer correctement les pare-feu, il conviendra donc ici de fixer l&rsquo;ensemble des ports d&rsquo;\u00e9coute des instances, pour ouvrir au minimum le pare-feu.<\/p>\n<p>Lorsqu&rsquo;une application se connecte \u00e0 une instance SQL, elle le fait via l&rsquo;utilisation d&rsquo;une cha\u00eene de connexion pr\u00e9cisant les diff\u00e9rents param\u00e8tres d&rsquo;acc\u00e8s. Parmi ces param\u00e8tres, l&rsquo;identification de l&rsquo;instance peut se faire de plusieurs mani\u00e8res :<\/p>\n<p>&#8211; pour une instance par d\u00e9faut, le nom du serveur est suffisant<\/p>\n<p>&#8211; pour une instance nomm\u00e9e, on peut directement sp\u00e9cifier le num\u00e9ro de port. Par exemple, pour une instance r\u00e9pondant sur le port 33111 sur le serveur MonServeur, l&rsquo;identification est : MonServeur,3311<\/p>\n<p>&#8211; pour une instance nomm\u00e9e, on peut aussi sp\u00e9cifier son nom. Par exemple, si l&rsquo;on veut se connecter \u00e0 l&rsquo;instance nomm\u00e9e Instance1 sur le serveur MonServeur, alors on peut indiquer MonServeur\\Instance1. Dans ce cas, le syst\u00e8me a besoin de convertir ce nom en num\u00e9ro de port, et va pour cela interroger le service SQL Browser sur le serveur (si toutefois celui-ci est d\u00e9marrer). Ce service r\u00e9pondra sur le port UDP 1434 et permettra donc d&rsquo;effectuer cette conversion du nom d&rsquo;instance en num\u00e9ro de port. Cette m\u00e9thode est la seule possible lorsque les num\u00e9ros de ports sont attribu\u00e9s de mani\u00e8re dynamique, mais dans le contexte d&rsquo;une architecture avec pare-feu, elle oblige \u00e0 laisser ouvert un port de plus (UPD 1434).<\/p>\n<p>Il m&rsquo;est assez souvent arriv\u00e9 de voir des utilisateurs pr\u00e9ciser \u00e0 la fois le nom d&rsquo;instance et le num\u00e9ro de port dans leur cha\u00eene de connexion. Que se passe-t-il alors, surtout si les informations fournies ne sont pas coh\u00e9rentes ? Et bien la r\u00e8gle est tout simplement celle du moindre effort : pourquoi s&#8217;emb\u00eater \u00e0 demander le num\u00e9ro de port correspondant \u00e0 un nom d&rsquo;instance si un num\u00e9ro de port nous est d\u00e9j\u00e0 donn\u00e9 ? Par exemple, si on param\u00e8tre une instance Instance1 pour r\u00e9pondre sur le port 3311 et une instance Instance2 pour r\u00e9pondre sur le port 33222, alors la cha\u00eene de connexion MonServeur\\Instance1,33222 nous connectera sur l&rsquo;instance Instance2.<\/p>\n<p>En r\u00e9sum\u00e9, la solution pr\u00e9conis\u00e9e consiste \u00e0 :<\/p>\n<p>&#8211; fixer pour chaque instance un num\u00e9ro de port fixe (et en profiter pour mettre pour l&rsquo;instance par d\u00e9faut une valeur diff\u00e9rente de 1433)<\/p>\n<p>&#8211; d\u00e9sactiver le service SQL Browser<\/p>\n<p>&#8211; toujours utiliser une cha\u00eene de connexion sous la forme NomServer,Port<\/p>\n<p>M\u00eame si ce mode de connexion n&rsquo;est pas n\u00e9cessairement \u00ab\u00a0User-Friendly\u00a0\u00bb, \u00e9tant donn\u00e9 qu&rsquo;un nom d&rsquo;instance est fait pour \u00eatre parlant, il est pr\u00e9f\u00e9rable d&rsquo;avoir une configuration efficace plut\u00f4t qu&rsquo;une configuration jolie &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SQL Server permet l&rsquo;installation de plusieurs moteurs de bases de donn\u00e9es sur un m\u00eame syst\u00e8me d&rsquo;exploitation. Le terme consacr\u00e9 pour d\u00e9crire ces moteurs install\u00e9s est \u00ab\u00a0instance\u00a0\u00bb. Cet article a pour objet de voir les bonnes pratiques pour se connecter \u00e0 &hellip; <a href=\"https:\/\/www.sqlserver.fr\/blog\/connexion-a-une-instance-nommee\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-948","post","type-post","status-publish","format-standard","hentry","category-article_sql"],"_links":{"self":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts\/948","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/comments?post=948"}],"version-history":[{"count":10,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts\/948\/revisions"}],"predecessor-version":[{"id":1767,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts\/948\/revisions\/1767"}],"wp:attachment":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/media?parent=948"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/categories?post=948"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/tags?post=948"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}