Konfigurieren der VM mit SQL Express für den Zugriff mit SSMS vom Host aus

2069
Robert Koritnik

Ich versuche, meine VM mit SQL Server 2008 R2 Express so zu konfigurieren, dass ich nur mit SQL Server Management Studio von einem Host-Computer aus remote auf SQL zugreifen kann.

VM-Konfiguration

  1. Windows Web Server 2008 R2 ausführen
  2. Es gibt zwei NICs:
    • Überbrückt, so dass eine Verbindung zum Internet hergestellt wird
    • Nur Host, damit ich schneller über ein virtuelles Netzwerk kommunizieren kann
  3. SQL Engine und Browserdienste werden beide ausgeführt
  4. Ich habe das TCP / IP-Protokoll für SQL Express aktiviert, jedoch keine IP-Adressen konfiguriert (separate Registerkarte).
  5. Ich habe eingehende Firewall-Regeln für Folgendes hinzugefügt:
    • 1433 TCP-Port
    • 1434 UDP-Port
  6. Wenn ich mir Netzwerkverbindungen anschaue, sehe ich meine beiden Netzwerkkarten, die mit Netzwerken verbunden sind. Ich kann das überbrückte Netzwerk auf Workplace setzen, aber ich kann den Netzwerktyp des Host-Only-Netzwerks nicht ändern. Es ist also standardmäßig auf " Öffentlich " eingestellt . Ich bin nicht sicher, ob das etwas damit zu tun hat, aber so ist es.

Host-Konfiguration

Das einzige, was ich auf meinem Host getan habe, ist, dass ich meiner VM-IP einen Namen gegeben habe. Und ich habe es mit der Host-only IP-Adresse gemacht. Ich habe einen Eintrag in meine HOSTS-Datei eingefügt.

Problem

Dann öffne ich SSMS auf meinem Host-Computer. Wenn ich im Dialogfeld "Mit Server verbinden " die Option Nach mehr suchen auswähle, kann ich tatsächlich die SQL-Instanz meiner VM sehen. Wenn ich versuche, eine Verbindung herzustellen, bekomme ich dies, wenn ich auf folgende drei Arten versuche, eine Verbindung herzustellen:

  • Rechnername (meine HOSTS-Datei übernimmt die IP-Remapping) enter image description here

  • Überbrückte Netzwerk-IP-Adresse enter image description here

  • Nur Host-IP-Adresse enter image description here

Frage 1: Was kann ich noch so konfigurieren, dass ich auf die SQL-Instanz meiner VM zugreifen kann? Wenn möglich möchte ich es auch so konfigurieren, dass ich nur über das Nur-Hots-Netzwerk und nicht über das überbrückte Netzwerk darauf zugreifen kann. Aber das wäre nur ein zusätzlicher Bonus, wenn ich es so konfigurieren könnte.

Frage 2: Benötige ich eigentlich den SQL Browser, weil er meines Wissens nur dafür sorgt, dass die SQL-Instanz auffindbar ist. Wenn ich SQL - Instanz kennen, ist es und ich weiß es Port 1433 verwendet, kann nicht einfach verbinde ich dies mit Servername :

DATAVM\SQLEXPRESS,1433 

Bearbeiten

Dies ist das Ergebnis von netstat: enter image description here

Ich habe auch portqry auf dem Host ausgeführt, um auf meiner VM nach meiner SQL-Instanz zu suchen . Wenn ich eine überbrückte IP-Adresse versuche, erhalte ich tatsächlich eine Antwort von 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 

Wie ich in diesem Ergebnis sehen kann, überwacht meine SQL-Instanz tatsächlich den TCP-Port 49159.

Also ging ich in SQL-Konfiguration und änderte diesen Port auf 1433.

Frage 3: Ist es normal, dass der Port nicht standardmäßig auf 1433 eingestellt ist? Soll ich ihn wieder auf 49159 ändern und meine eingehende Firewall-Regel ändern, um diesen Port zu passieren, oder soll ich ihn jetzt auf 1433 belassen?

Wenn Sie den Port auf 1433 ändern, kann ich von meiner Hostmaschine SSMS aus eine Verbindung zur VM herstellen . Ich kann dies jedoch nur mit gebrückter IP-Adresse tun.

Wenn ich die TCP / IP-Einstellungen im SQL-Protokoll verstehe, sollten die IP-Adressen alle IP-Adressen des Computers auflisten. Ich kann 5 von ihnen sehen:

  1. überbrückte NIC V6-Adresse
  2. überbrückte NIC V4-Adresse
  3. localhost V6 (:: 1)
  4. localhost V4 (127.0.0.1)
  5. etwas ? V6-Adresse, die nicht mit einem Bridged- oder Host-Only-Netzwerk zusammenhängt (z. B. 80 :: 100: 7f: fffe% 12)

Ich gehe davon aus, dass dies auch der Grund ist, warum ich keine Verbindung mit einem Host-Only-Netzwerk herstellen kann. Aber wie konfiguriere ich meine VM so, dass ich dazu in der Lage bin (und möglicherweise das überbrückte) deaktivieren kann?

1
Bitte überprüfen Sie, ob am Port "netstat -a" überwacht wird. Möglicherweise möchten Sie auch die IP-Adressen konfigurieren (Schritt 4), um zu sehen, ob sich dadurch etwas verbessert. Tom Wijsman vor 12 Jahren 0
@TomWijsman: Überprüfe meine bearbeitete Frage, wo ich das Ergebnis von ** netstat ** angehängt habe und auch eine Teillösung, bei der ich eine Verbindung herstellen konnte. aber nicht so, wie ich es wollte ... bitte oben lesen. Robert Koritnik vor 12 Jahren 0
Ich bin froh, dass Sie tatsächlich Fortschritte gemacht haben, ich bin nicht gut in den VM-Netzwerkeinstellungen, aber ich wollte nur, dass Sie Details hinzufügen, die Sie (oder andere) zu einer Lösung führen könnten. Viel Glück! :) Tom Wijsman vor 12 Jahren 0

2 Antworten auf die Frage

0
MikeJansen

SQL Browser ist für benannte Instanzen erforderlich, wenn ich mich richtig erinnere. Ihre benannte Instanz überwacht einen anderen Port (den Sie entdeckt haben) und der SQL-Browser zeigt diesen Port an. Sie können Ihre Instanz auch so konfigurieren, dass sie einen bestimmten Port mithilfe der SQL-Netzwerkkonfiguration überwacht.

Ich fand die Netzwerkkommunikation zwischen Hosts und VMs manchmal etwas frustrierend.

Haben Sie versucht, Ihre Firewall auf der VM zu deaktivieren, nur um zu testen? Dies ist normalerweise der erste Schritt in punkto Verbindungsproblemen. Bei über 90% der Verbindungsprobleme handelt es sich um Firewall-Probleme.

Fügen Sie die SQL-Prozesse zu Firewall-Ausnahmen hinzu und nicht zu bestimmten Ports. Auf diese Weise spielt es keine Rolle, welche Ports die Anwendung verwendet. Sie sagen der Firewall "Diese App ist cool, ich würde sie meinen Kindern anvertrauen". MikeJansen vor 12 Jahren 0
Sie können Ihre Antwort mit diesen Informationen bearbeiten, anstatt sie als Kommentar zu hinterlassen. soandos vor 12 Jahren 0
@ MikeJansen: Nun, es scheint so, als ob der Server * offen * ist, es ist besser, den SQL-Browser nicht auszuführen **, da er nicht benötigt wird. Sie können immer eine Verbindung unter Verwendung der Port-Informationen als ** machineName \ sqlInstanceName, portNumber ** herstellen. Es funktioniert einfach. Da eine App auf die SQL-Datenbank (und Sie als Entwickler) zugreift, ist Port eine bekannte Variable. Durch Ausführen des SQL-Browsers wird diese Variable öffentlich bekannt. Anstatt die EXE zur Firewall hinzuzufügen, habe ich nur Port hinzugefügt. Es ist fraglich, welche besser ist. Robert Koritnik vor 12 Jahren 0
@ MikeJansen: und ja ... Ich habe versucht, die Firewall auszuschalten. Es scheint nur, dass ich keine Verbindung über ein virtuelles Host-Only-Netzwerk herstellen kann ... Ich denke, das sollte jetzt eine andere Frage sein, weil sie nur teilweise mit der ursprünglichen Frage zusammenhängt. Robert Koritnik vor 12 Jahren 0
@ MikeJansen: Zu Ihrer Information: Ich habe es jetzt selbst konfiguriert, obwohl ich eine Frage zu [ServerFault] (http://serverfault.com/q/359470/15651) gestellt habe. [Dies ist der Link] (http://serverfault.com/a/359490/15651) zur Lösung dort. Robert Koritnik vor 12 Jahren 0
0
Robert Koritnik

Lösung

Je tiefer ich mich damit beschäftigte, desto mehr schien es sich um ein Netzwerkproblem als um die SQL Server-Konfiguration zu handeln. Und es war.

Ich habe das Netzwerkproblem gelöst und Sie können die Lösung für ServerFault lesen . Auf diese Weise können Sie das virtuelle Host-Only-Netzwerk so konfigurieren, dass es nicht so gesperrt ist, wie es von Windows standardmäßig festgelegt wird.

Aber es gibt noch etwas anderes. Und das sind ** IP-Adressen, die im TCP / IP-Protokoll in der Konfiguration der SQL Server-Instanz angezeigt werden.

Das Problem hierbei ist, dass diese IP-Liste nur bei der Installation Ihrer SQL Server-Instanz eingetragen wird. Wenn Sie Änderungen an Ihren Netzwerkadaptern vornehmen, werden diese Änderungen nicht in der SQL Server-Konfiguration übernommen. Dies ist ein bekanntes Problem seit 2006 und noch nicht gelöst.

In meinem Fall habe ich eine zusätzliche NIC hinzugefügt, die nur für den Host vorgesehen ist. Da meine SQL-Instanz bereits installiert wurde, werden diese IP-Adressen in der Konfiguration nicht angezeigt. Wie sich herausstellt, können Sie diese neuen oder geänderten Einstellungen mit dem Registrierungseditor manuell hinzufügen.

Navigiere zu:

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

Dort finden Sie alle IP-Adressen, die Sie konfigurieren können. Da ich zwei weitere Adressen hinzufügen musste, exportierte ich IP2 und bearbeitete dann die gespeicherte * .reg-Datei:

  1. Änderte die erste Zeile und änderte IP2 in IP n (wobei n aktuell max + 1 ist)
  2. Geänderte IP-Adresse und hinzugefügte v6-IP-Adresse des Host-Only-Netzwerks
  3. Alle diese Zeilen kopiert und eingefügt
  4. Inkrementierte IP n um 1
  5. Geänderte IP-Adresse und hinzugefügte v4-IP-Adresse des Host-Only-Netzwerks

Die Datei wurde gespeichert und in den Registrierungseditor importiert. Ich kann dann zwei weitere IP-Adressen im Registrierungs-Editor sehen.

Geöffnete SQL Server-Konfiguration und ja, ich habe jetzt zwei zusätzliche OP-Adressen in der SQL-Instanzkonfiguration des TCP / IP-Protokolls, die ich individuell konfigurieren kann.

Das ist es. Arbeitet.