Configuration de la machine virtuelle avec SQL Express accessible via SSMS à partir de l'hôte

1

J'essaie de configurer ma machine virtuelle avec SQL Server 2008 R2 Express pour pouvoir uniquement accéder à distance à SQL à l'aide de SQL Server Management Studio à partir de la machine hôte.

Configuration de la VM

  1. sous Windows Web Server 2008 R2
  2. Il y a deux cartes réseau:
    • Ponté pour qu'il se connecte à Internet
    • Héberger uniquement afin de pouvoir communiquer plus rapidement sur un réseau virtuel
  3. Les services SQL Engine et Browser sont tous deux en cours d'exécution
  4. J'ai activé le protocole TCP / IP pour SQL Express mais je n'ai configuré aucune adresse IP (onglet séparé)
  5. J'ai ajouté des règles de pare-feu entrantes pour:
    • 1433 port TCP
    • 1434 port UDP
  6. Si je regarde dans les connexions réseau, je vois mes deux cartes réseau connectées aux réseaux. Je peux définir un réseau ponté sur Lieu de travail mais je ne peux pas changer le type de réseau du réseau uniquement hôte. Donc, il est réglé sur Publique par défaut. Je ne sais pas si cela a quelque chose à voir avec ça, mais c'est comme ça.

Configuration de l'hôte

La seule chose que j'ai faite sur mon hôte, c'est que j'ai attribué un nom à mon IP de VM. Et je l'ai fait avec l'adresse IP réservée à l'hôte. J'ai ajouté une entrée dans mon fichier HOSTS.

Problème

Ensuite, j'ouvre SSMS sur mon ordinateur hôte et si je sélectionne Parcourir pour plus dans le Connecter au serveur fenêtre de dialogue, je peux réellement voir l'instance SQL de ma machine virtuelle. Mais lorsque j'essaie de me connecter, c'est ce que je reçois lorsque j'essaie de me connecter des trois manières suivantes:

  • nom de la machine (mon fichier HOSTS fera le remappage IP) enter image description here

  • adresse IP réseau pontée enter image description here

  • adresse IP de l'hôte uniquement enter image description here

Question 1: Que puis-je configurer pour pouvoir accéder à l'instance SQL de ma machine virtuelle? Si possible, j'aimerais également le configurer, afin que je ne puisse y accéder que via le réseau Hots-only et non via le réseau ponté. Mais ce ne serait qu'un bonus supplémentaire si je pouvais le configurer de cette façon.

Question 2: Ai-je réellement besoin de SQL Browser pour fonctionner car, autant que je sache, il ne s'occupe que de l'instance SQL détectable. Si je sais que l'instance SQL est et je sais qu'il utilise le port 1433, je ne peux pas simplement me connecter à l'aide de cette Nom du serveur :

DATAVM\SQLEXPRESS,1433

modifier

C'est le résultat de netstat: enter image description here

J'ai aussi couru portqry sur l'hôte pour vérifier mon instance SQL sur ma machine virtuelle. Si je tente une adresse IP pontée, j'obtiens la réponse de SQL Browser:

Starting portqry.exe -n 192.168.1.143 -e 1434 -p UDP ...

Querying target system called:
 192.168.1.143

Attempting to resolve IP address to a name...

IP address resolved to Datavm

querying...

UDP port 1434 (ms-sql-m service): LISTENING or FILTERED

Sending SQL Server query to UDP port 1434...

Server's response:

ServerName DATAVM
InstanceName SQLEXPRESS
IsClustered No
Version 10.50.1600.1
tcp 49159

Comme je peux le voir dans ce résultat, mon instance SQL écoute actuellement sur le port TCP 49159.

Alors je suis allé en configuration SQL et j'ai changé ce port en 1433.

Question 3: Est-ce normal que le port n'ait pas été défini sur 1433 par défaut? Devrais-je le reconvertir en 49159 et changer ma règle de pare-feu entrant pour passer par ce port ou si je devais le laisser maintenant sur 1433?

En changeant de port en 1433 Je peux me connecter à la machine virtuelle à partir de mon ordinateur hôte SSMS . Mais je ne peux le faire qu'en utilisant une adresse IP pontée.

Si je comprends bien les paramètres TCP / IP dans le protocole SQL, le Adresses IP devrait lister toutes les adresses IP de la machine. Je peux en voir 5:

  1. adresse pontée V6 de la carte réseau
  2. adresse pontée VIC V4
  3. localhost V6 (:: 1)
  4. localhost V4 (127.0.0.1)
  5. certains ? Adresse V6 non liée à un réseau ponté ou à un hôte uniquement (fe80 :: 100: 7f: fffe% 12)

Je suppose que c'est aussi la raison pour laquelle je ne peux pas me connecter à l'aide d'un réseau uniquement hôte ... Mais comment puis-je configurer ma machine virtuelle de sorte que je puisse (et éventuellement désactiver la passerelle)?

Robert Koritnik
la source
Veuillez vérifier s'il y a une écoute sur le port netstat -a et vous pouvez également vouloir configurer les adresses IP (étape quatre) pour voir si cela améliore quelque chose.
Tom Wijsman
@TomWijsman: Consultez ma question modifiée à laquelle j'ai joint netstat Le résultat et aussi une solution partielle où je pouvais me connecter. mais pas la façon dont je voulais ... S'il vous plaît lire ci-dessus.
Robert Koritnik
Heureux que vous ayez réellement progressé, je ne suis pas très doué pour les paramètres réseau de la VM, mais je voulais simplement que vous ajoutiez des détails qui pourraient vous amener (ou aider d'autres personnes) à trouver une solution. Bonne chance! :)
Tom Wijsman

Réponses:

0

Le navigateur SQL est nécessaire pour les instances nommées si je me souviens bien. Votre instance nommée écoute sur un port différent (que vous avez découvert) et SQL Browser révélera ce port. Vous pouvez également configurer votre instance pour écouter sur un port spécifique à l'aide de la configuration réseau SQL.

J'ai également trouvé la communication réseau host-to-vm un peu frustrante.

Avez-vous essayé de désactiver votre pare-feu sur la machine virtuelle juste pour le tester? C'est généralement la première étape des problèmes de connectivité. Plus de 90% des problèmes de connectivité sont des problèmes de pare-feu.

MikeJansen
la source
Ajoutez également les processus SQL aux exceptions du pare-feu et non à des ports spécifiques. De cette façon, les ports utilisés par l'application importent peu. Vous dites au pare-feu "cette application est cool, je lui fais confiance avec mes enfants".
MikeJansen
Vous voudrez peut-être modifier votre réponse avec cette information plutôt que de la laisser sous forme de commentaire.
soandos
@ MikeJansen: Eh bien, il semble que surtout si votre serveur est ouvrir il est préférable de pas exécuter le navigateur SQL parce que ce n'est pas nécessaire après tout. Vous pouvez toujours vous connecter en utilisant les informations de port comme machineName \ sql Nom d'instance, numéro de port . Ça fonctionne. Et comme une application accède à la base de données SQL (et à vous le développeur), le port est une variable connue. L'exécution de SQL Browser rend cette variable publique. Et au lieu d’ajouter le fichier EXE au pare-feu, je viens d’ajouter un port. C'est discutable lequel est le meilleur.
Robert Koritnik
@ MikeJansen: et oui ... j'ai essayé de désactiver le pare-feu. Il semble simplement que je ne peux pas me connecter via un réseau uniquement hôte virtuel ... Je pense que cela devrait être une question distincte maintenant parce que cela est en partie lié à la question initiale.
Robert Koritnik
@ MikeJansen: FYI: J'ai réussi à le configurer moi-même maintenant même si j'ai posé une question sur ServerFault ainsi que. Voici le lien à la solution là-bas.
Robert Koritnik
0

Solution

Au fur et à mesure que je m'approfondis, il me semblait de plus en plus qu'il s'agissait d'un problème de réseau plutôt que de la configuration de SQL Server. Et c'était.

J'ai résolu le problème de réseau et vous pouvez en savoir plus sur la solution ServerFault . Cela vous aidera à configurer le réseau virtuel réservé aux hôtes afin qu'il ne soit pas aussi verrouillé que Windows le configure par défaut.

Mais il y a autre chose. Et ce sont ** les adresses IP que l’on peut voir dans le protocole TCP / IP dans la configuration d’instance SQL Server.

Le problème ici est que cette liste IP n'est remplie que lorsque vous installez votre instance SQL Server. Si vous apportez des modifications à vos cartes réseau, ces modifications ne seront pas reflétées dans la configuration de SQL Server. C'est un problème connu depuis 2006 et pas encore résolu.

Dans mon cas, j'ai ajouté une carte réseau supplémentaire à l'hôte uniquement et, comme mon instance SQL a déjà été installée, ces adresses IP n'apparaissent pas dans la configuration. Il se trouve que vous pouvez manuellement ajoutez ces paramètres nouveaux ou modifiés à l'aide de l'éditeur de registre.

Aller vers:

HKEY_LOCAL_MACHINE
  SOFTWARE
    Microsoft
      Microsoft SQL Server
        MSSQL10_50.[InstanceName]
          MSSQLServer
            SuperSocketNetLib
              Tcp

Vous y trouverez toutes les adresses IP que vous pouvez configurer. Comme je devais ajouter deux adresses supplémentaires, j'ai exporté IP2, puis modifié le fichier * .reg enregistré:

  1. Changé la première ligne et changé IP2 à IP n (où n est courant max + 1)
  2. Adresse IP modifiée et adresse IP v6 ajoutée du réseau uniquement hôte
  3. Copié et collé toutes ces lignes
  4. IP incrémenté n par 1
  5. Adresse IP modifiée et adresse IP v4 ajoutée du réseau uniquement hôte

Enregistré le fichier et importé dans l'éditeur de registre. Je peux alors voir deux adresses IP supplémentaires dans l'éditeur de registre.

Configuration de SQL Server ouverte et oui, j'ai maintenant deux adresses OP supplémentaires dans la configuration d'instance SQL du protocole TCP / IP que je peux configurer individuellement.

C'est tout. Travaux.

Robert Koritnik
la source