Activer les connexions à distance pour SQL Server Express 2012


403

Je viens d'installer SQL Server Express 2012 sur mon serveur domestique. J'essaie de me connecter à partir de Visual Studio 2012 à partir de mon ordinateur de bureau et j'obtiens à plusieurs reprises l'erreur bien connue:

Une erreur liée au réseau ou spécifique à l'instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou inaccessible. Vérifiez que le nom d'instance est correct et que SQL Server est configuré pour autoriser les connexions à distance. (fournisseur: fournisseur de canaux nommés, erreur: 40 - Impossible d'ouvrir une connexion à SQL Server)

Ce que j'ai fait pour essayer de résoudre ce problème:

  • Exécutez SQL Server Configuration Manager sur le serveur et activez le navigateur SQL Server
  • Ajoutez une exception de pare-feu Windows sur le serveur pour TCP, les ports 1433 et 1434 sur le sous-réseau local.
  • Vérifiez que j'ai une connexion sur l'instance SQL Server pour l'utilisateur auquel je suis connecté en tant que sur le bureau.
  • Vérifiez que j'utilise l'authentification Windows sur l'instance SQL Server.
  • Redémarrez à plusieurs reprises SQL Server et l'ensemble du serveur Dang.
  • Retirez tous mes cheveux.

Comment puis-je obtenir SQL Server 2012 Express pour autoriser les connexions à distance!?


7
J'ai résolu en activant le service SQL Server Browser: D. Merci de l'avoir posté.
alansiqueira27

1
Le déverrouillage du port UDP 1433 m'a aidé!
Michael

1
Et si vous utilisez une machine virtuelle Azure, n'oubliez pas d'ouvrir également le port via le portail de gestion Azure (qui agit comme un pare-feu externe sur le propre pare-feu de la machine virtuelle ...). Comme ça: stackoverflow.com/questions/34251382/…
jleach

Pour ceux qui se demandent où Sql Server Configuration Manager a disparu dans les versions plus récentes,
rendez

Réponses:


731

Eh bien, je suis content d'avoir demandé . La solution que j'ai finalement découverte était là:

Comment configurer SQL Server Express pour autoriser les connexions TCP / IP distantes sur le port 1433?

  1. Exécutez le Gestionnaire de configuration SQL Server.
  2. Accédez à Configuration réseau SQL Server> Protocoles pour SQLEXPRESS.
  3. Assurez-vous que TCP / IP est activé.

Jusqu'à présent, tout va bien et tout à fait attendu. Mais alors:

  1. Cliquez avec le bouton droit sur TCP / IP et sélectionnez Propriétés .
  2. Vérifiez que, sous IP2, l'adresse IP est définie sur l'adresse IP de l'ordinateur sur le sous-réseau local.
  3. Faites défiler jusqu'à IPAll.
  4. Assurez-vous que les ports dynamiques TCP sont vides . (Le mien était réglé sur un numéro de port à 5 chiffres.)
  5. Assurez-vous que le port TCP est défini sur 1433 . (Le mien était vide.)

(De plus, si vous suivez ces étapes, il n'est pas nécessaire d'activer le navigateur SQL Server et vous devez uniquement autoriser le port 1433, pas 1434.)

Ces cinq étapes supplémentaires sont quelque chose dont je ne me souviens pas avoir eu à faire dans une version précédente de SQL Server, Express ou autre. Ils semblent avoir été nécessaires car j'utilise une instance nommée (myservername \ SQLEXPRESS) sur le serveur au lieu d'une instance par défaut. Vois ici:

Configurer un serveur pour écouter sur un port TCP spécifique (Gestionnaire de configuration SQL Server)


7
Si SQL Server Express n'est pas la seule instance, il peut être nécessaire de DÉSASSIGNER le port 1433 sur d'autres instances. J'avais une instance par défaut 2008 R2 (MSSQLSERVER), et la seule façon dont je peux me connecter à tous les deux de l'extérieur est d'affecter le port 1433 à l'instance 2012 (ci-dessus) et de changer les affectations de port pour l'ancienne instance par défaut en TCP Dynamic Ports = "0" et TCP Port = "" (vide). Le faire dans l'autre sens n'a donné accès qu'à l'instance par défaut.
Robert Calhoun

17
Ce IPAllréglage était le conseil SAVEUR! Le mien était comme le vôtre ...: D
Leniel Maccaferri

18
Au cas où cela aiderait quelqu'un d'autre ... cela a aidé, mais je n'ai toujours pas pu me connecter avant d'avoir démarré le service SQL Server Browser. (Remarque: j'ai dû aller dans l'application «Services» de Windows pour ce faire, car le type de démarrage du service SQL Server Browser était «Désactivé» pour une raison quelconque. Changé le type de démarrage en «Automatique», démarré le service, puis capable de se connecter.)
mercurial

9
Sur Windows 8 et SQL 2012 Express SP1 installé sur l'instance SQLEXPRESS, j'ai dû définir des ports dynamiques sur autre chose que vide (si vous l'avez supprimé, défini sur 0, il recalculera un nouveau port aléatoire pour vous) ET ouvrira également LES DEUX TCP Règles de port entrant 1433 et UDP 1434 dans le panneau de configuration Advanced Firewall. Lorsque les ports dynamiques étaient vides, SQL Server venait de se bloquer au démarrage.
Tony Wall

10
Je voulais juste dire merci et voter. Tu m'as sauvé beaucoup de temps. Cela vous dérange-t-il de mettre à jour votre message avec la syntaxe de connexion correcte? Je dois utiliser myserver\sqlexpress,[portnumber]sans les supports. Remarquez que c'est le cas ,et non:
Marco

105

La bonne façon de se connecter à SQL Server distant (sans ouvrir le port UDP 1434 et sans activer le navigateur SQL Server) consiste à utiliser ip et port au lieu de l' instance nommée .

L'utilisation d'ip et de port au lieu d'une instance nommée est également plus sûre, car elle réduit la surface d'attaque.

Peut-être que 2 images parlent 2000 mots ...

Cette méthode utilise le port spécifié (c'est ce que la plupart des gens veulent, je crois).

entrez la description de l'image ici

Cette méthode nécessite l'ouverture du port UDP 1434 et l'exécution du navigateur SQL Server.

entrez la description de l'image ici


Pouvez-vous préciser ce que vous voulez dire en disant que c'est la "bonne" façon de procéder?
Ryan Lundy

3
@ Kyralessa Ha! ... maintenant que je suis à nouveau sobre après 4 à 5 heures de cheveux tirant en essayant de me connecter à mon instance distante, je devrais probablement expliquer que «correct» ici est censé être lu à partir de mon contexte. Il est «incorrect» de se connecter en utilisant le nom de l'instance car je n'ai pas activé le navigateur SQL Server.
Rosdi Kasim

J'ai ajouté quelques éclaircissements à ma réponse pour éviter tout malentendu.
Rosdi Kasim

1
Merci;) Lorsque vous n'avez pas accès au service de navigation, vous devez spécifier le port.
Arman McHitarian

3
plus 1 pour montrer que MS utilise une virgule au lieu de colonnes comme séparateur pour le numéro de port
Jorj

32

Encore une chose ...

Kyralessa fournit d'excellentes informations mais j'ai une autre chose à ajouter où j'ai été perplexe même après cet article.

Sous Configuration du réseau SQL Server> Protocoles pour le serveur> TCP / IP activé. Cliquez avec le bouton droit sur TCP / IP et choisissez les propriétés. Sous les adresses IP, vous devez définir Activé sur Oui pour chaque type de connexion que vous utilisez.

entrez la description de l'image ici


18

Vous pouvez l'utiliser pour résoudre ce problème:

Accédez à START> EXECUTE et exécutez CLICONFG.EXE.

Le protocole Named Pipes sera le premier dans la liste, supprimez-le et promouvez TCP / IP.

Testez soigneusement l'application.

J'espère que cette aide.


Wow, quel bijou ... merci. Je n'ai jamais su que ça existait.
Louis van Tonder

1
Cela configure le CLIENT pour utiliser TCP / IP, pas le serveur.
mcr

OMG, ça marche !! vient de signer pour voter pour cette réponse. merci
Aki

15

Vous pouvez également définir

Écouter tout NON

dans la boîte de dialogue de protocole puis dans l'adresse IP IP1 (disons)

définir activé sur Oui,

définir votre adresse IP,

définissez TCP Dynamic sur Blank et

Port TCP à 1433 (ou autre)


Faire cela sur Windows 8.1 avec SQL 2012 Express SP1 installé a provoqué le blocage de SQL au démarrage :(
Zhaph - Ben Duguid

J'ai défini toutes les entrées IP 1, 2, ..., sur activé + actif, effacé dynamique, effacé, et défini IPAll port sur 1433, puis j'ai dû ajouter des règles pour ouvrir TCP 1433 et UPD 1434 dans le pare-feu (1434 n'est pas requis si vous n'utilisez pas le nom, mais uniquement le numéro de port).
Mordachai


11

J'ai eu ce problème récemment. 2015 août

Résolu en ouvrant le Gestionnaire de configuration SQL Server

  • Configuration du réseau SQL Server -> Protocoles pour SQLEXPRESS
  • Propriétés sur TCP / IP -> onglet Adresses IP
  • Tout reste par défaut, ne définissez que IPALL: Port TCP sur 1433

Peut se connecter avec SQL Server Manager à la machine: [hostaddress], 1433

Exemple:

entrez la description de l'image ici


6

Sur mon installation de SQL Server 2012 Developer Edition, installée avec les paramètres par défaut, je devais simplement charger le Gestionnaire de configuration SQL Server -> Configuration réseau SQL Server -> Protocoles pour MSSQLSERVER et changer TCP / IP de Désactivé à Activé.


1
Note rapide: pour moi, cela n'a pas fonctionné. La mauvaise adresse IP était là pour une raison quelconque. Cependant, les étapes de Kyralessa ont fait l'affaire car elles ont consisté à mettre à jour l'IP.
Brian MacKay

Cela fonctionne pour l'un de mes serveurs, mais pas pour l'autre.
cheny

5

J'ai dû ajouter une règle de port entrant de pare-feu pour ouvrir le port UDP 1434. C'est celui sur lequel Sql Server Browser écoute.


3

Je préfère le moyen de "Rosdi Kasim" car cela ne nécessite pas de configuration détaillée sur l'IP.

Je l'oublierai certainement de nouveau lorsque j'essaierai de réinstaller un autre serveur.

Keep It Simple Stupid (KISS) en activant simplement le service Sql Server Browser, puis ajoutez le \ SQLEXPRESS derrière l'IP lorsque vous connectez le serveur.

L'utilisation directe d'IP sans "\ SQLEXPRESS" a été mon point de défaillance car il n'utilise pas le port par défaut.

Merci.


3

J'ai eu le même problème avec l'instance nommée installée localement SQL Server 2014. La connexion en utilisant le FQDN\InstanceNameéchouerait, tandis que la connexion en utilisant uniquement mon hostname\InstanceNametravail. Par exemple: se connecter en utilisant mycomputername\sql2014travaillé, mais en utilisantmycomputername.mydomain.org\sql2014 non. DNS résolu correctement, TCP / IP a été activé dans SQL Configuration Manager, des règles de pare-feu Windows ont été ajoutées (puis ont désactivé le pare-feu pour les tests afin de s'assurer qu'il ne bloquait rien), mais aucune de celles-ci n'a résolu le problème.

Enfin, j'ai dû démarrer le service " SQL Server Browser " sur SQL Server et cela a résolu le problème de connectivité.

Je n'avais jamais réalisé que le service SQL Server Browser aidait réellement SQL Server à établir des connexions; J'avais l'impression que cela a simplement aidé à remplir les listes déroulantes lorsque vous avez cliqué sur "Parcourir pour plus" de serveurs auxquels vous connecter, mais cela aide en fait à aligner les demandes des clients sur le bon port # à utiliser, si le port # n'est pas explicitement attribué (similaire comment les liaisons de sites Web aident à atténuer le même problème sur un serveur Web IIS qui héberge plusieurs sites Web).

Cet élément de connexion est ce qui m'a donné l'indice sur le service SQL Server Browser: https://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine- Nom

  • lorsque vous utilisez wstst05 \ sqlexpress comme nom de serveur, le code client sépare le nom de la machine du nom de l'instance et le wstst05 est comparé au nom netbios. Je ne vois aucun problème pour eux et la connexion est considérée comme locale. À partir de là, nous récupérons les informations nécessaires SANS contacter le navigateur SQL et nous nous connectons à l'instance SQL via la mémoire partagée sans aucun problème.
  • lorsque vous utilisez wstst05.capatest.local \ sqlexpress, le code client échoue la comparaison du nom (wstst05.capatest.local) avec le nom netbios (wstst05) et considère la connexion "distante". C'est par conception et nous envisagerons certainement d'améliorer cela à l'avenir. Quoi qu'il en soit, compte tenu de la connexion distante et du fait qu'il s'agit d'une instance nommée, le client décide qu'il doit utiliser SQLBrowser pour la résolution de noms. Il tente de contacter le navigateur SQL sur wstst05.capatest.local (port UDP 1434) et apparemment cette partie échoue. D'où l'erreur que vous obtenez.

La raison du service "SQL Server Browser" de TechNet (emphase ajoutée par moi): https://technet.microsoft.com/en-us/library/ms181087(v=sql.120).aspx

Dans la section "Utilisation du navigateur SQL Server":

Si le service SQL Server Browser n'est pas en cours d'exécution, vous pouvez toujours vous connecter à SQL Server si vous fournissez le numéro de port correct ou le canal nommé. Par exemple, vous pouvez vous connecter à l'instance par défaut de SQL Server avec TCP / IP si elle s'exécute sur le port 1433. Cependant, si le service SQL Server Browser n'est pas en cours d'exécution, les connexions suivantes ne fonctionnent pas :

  • Tout composant qui tente de se connecter à une instance nommée sans spécifier entièrement tous les paramètres (comme le port TCP / IP ou le canal nommé) .
  • Tout composant qui génère ou transmet des informations de serveur \ instance qui pourraient ensuite être utilisées par d'autres composants pour se reconnecter.
  • Connexion à une instance nommée sans fournir le numéro de port ou le canal.
  • DAC vers une instance nommée ou l'instance par défaut si vous n'utilisez pas le port TCP / IP 1433.
  • Le service de redirection OLAP.
  • Énumération des serveurs dans SQL Server Management Studio, Enterprise Manager ou Query Analyzer.

Si vous utilisez SQL Server dans un scénario client-serveur (par exemple, lorsque votre application accède à SQL Server via un réseau), si vous arrêtez ou désactivez le service SQL Server Browser, vous devez attribuer un numéro de port spécifique à chaque instance et écrivez votre code d'application client pour toujours utiliser ce numéro de port. Cette approche présente les problèmes suivants :

  • Vous devez mettre à jour et maintenir le code de l'application client pour vous assurer qu'il se connecte au port approprié.
  • Le port que vous choisissez pour chaque instance peut être utilisé par un autre service ou application sur le serveur, entraînant l'indisponibilité de l'instance de SQL Server.

Et plus d'informations dans le même article de la section "Fonctionnement du navigateur SQL Server":

Parce que qu'une seule instance de SQL Server peut utiliser un port ou un canal, différents numéros de port et noms de canal sont attribués pour les instances nommées, y compris SQL Server Express. Par défaut, lorsqu'il est activé, les instances nommées et SQL Server Express sont configurés pour utiliser des ports dynamiques, c'est-à-dire qu'un port disponible est attribué au démarrage de SQL Server. Si vous le souhaitez, un port spécifique peut être attribué à une instance de SQL Server. Lors de la connexion, les clients peuvent spécifier un port spécifique; mais si le port est attribué dynamiquement, le numéro de port peut changer à chaque redémarrage de SQL Server, de sorte que le numéro de port correct est inconnu du client. ... Lorsque les clients SQL Server demandent des ressources SQL Server, la bibliothèque réseau client envoie un message UDP au serveur à l'aide du port 1434. Le navigateur SQL Server répond avec le port TCP / IP ou le canal nommé de l'instance demandée.


2

J'ai dû ajouter un port via Configuration Manager et ajouter le numéro de port dans ma connexion SQL [hôte] \ [nom d'instance db], 1433

Notez le, (virgule) entre le nom d'instance et le port


1

J'ai eu un problème différent de ce que toutes les réponses mentionnées jusqu'à présent!

Je devrais commencer par dire que je l'avais dans Visual Studio, et non SQL Server Express, mais la solution devrait être exactement la même.

Eh bien, mon dieu, c'est en fait très simple et peut-être un peu stupide. Lorsque j'ai essayé de créer une base de données et que Visual Studio a suggéré le nom du serveur SQL, il m'a donné mon nom d'utilisateur Windows et puisque c'est en fait le nom du serveur, je l'ai choisi.

En réalité, c'était en fait mon nom d'utilisateur Windows + \SQLEXPRESS. Si vous n'avez modifié aucun paramètre, c'est probablement aussi le vôtre. Si cela fonctionne, arrêtez de lire; c'est ma réponse. Si cela ne fonctionne pas, le nom est peut-être différent.

Si, comme moi, vous n'avez rencontré ce problème dans Visual Studio que pour vérifier le vôtre, procédez comme suit:

  1. Ouvrez l' icône SQL Server Management Studio .
  2. Si vous ne voyez pas votre serveur (ancré à gauche par défaut), appuyez sur F8ou allez dans Affichage -> Explorateur d'objets .
  3. Faites un clic droit sur le nom du serveur et choisissez Propriétés (Le dernier élément)
  4. En bas à gauche, vous pouvez voir le nom réel de votre serveur sous " Serveur " (pas Connexion, mais au-dessus).

Ceci est le nom du serveur et c'est à cela que vous devez essayer de vous connecter! pas ce que Visual Studio suggère!



1

Dans mon cas, la base de données fonctionnait sur un port non standard. Vérifiez que le port que vous connectez est le même que le port sur lequel la base de données s'exécute. S'il y a plus d'instances de SQL Server, vérifiez la bonne.


0

Il vous suffit d'ouvrir le port correspondant sur le pare-feu du serveur.


6
Malheureusement, ce n'est pas "tout ce que vous devez faire". Il y a pas mal d'autres étapes qui doivent être prises, comme indiqué dans la réponse acceptée ci-dessus.
saluce

2
En fait, dans mon cas, c'était tout ce que j'avais à faire, donc injustement marqué et une entrée réellement utile.
MagicalArmchair

1
L'ajout d'une règle pour ouvrir le port 1433 a été ce qui l'a corrigé pour moi.
GiddyUpHorsey

Je pense qu'il est juste de dire que "beaucoup de choses doivent être alignées, les étapes supplémentaires nécessaires pour vous varieront"
Mordachai

J'ai dû faire tous ceux de Kyralessa, Pete et celui-ci également avant de pouvoir utiliser Windows 10 pour SQL.
alfadog67

0

Vous rencontrez des problèmes de connexion à SQL Server?

Essayez de déconnecter le pare-feu.

Si vous pouvez vous connecter avec un pare-feu déconnecté, peut-être que vous manquez certaines règles d'entrée comme "SQL Service Broker", ajoutez ces règles d'entrée à votre pare-feu:

PORT TCP 1434 "CONNEXION ADMIN SQL"

PORT UDP "CONNEXION ADMIN SQL" 1434

PORT TCP 2383 "SERVICE D'ANALYSE SQL"

PORT TCP 2382 "SERVICE D'ANALYSE SQL BROWSE"

PORT TCP "SQL DEBUGGER / RPC" 135

PORT TCP "SERVEUR SQL" 1433 et autres si vous avez des ports dinamic

PORT TCP 4022 "COURTIER DE SERVICES SQL"

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.