Wie kann eine Verbindung zu einer lokalen SQL Server-Instanz über die IP-Adresse in SQL Server Management Studio hergestellt werden? [Duplikat]

Nov 19 2020

Ich schreibe einen Testcode, der erforderlich ist, um eine Verbindung zu einer lokalen SQL Server-Instanz (SQL Server 2017 - Developer Edition) über die IP-Adresse herzustellen. Ich habe die SQL Server-Instanz auf meinem Computer eingerichtet, kann jedoch nicht den richtigen IP + -Port ermitteln, der für die Servereigenschaft meiner Verbindungszeichenfolge verwendet werden soll.

Als Ausgangspunkt versuche ich, mit SQL Server Management Studio (über die IP-Adresse) zumindest manuell eine Verbindung zu meiner Serverinstanz herzustellen, aber ich kann es anscheinend nicht herausfinden.

  1. Wie finde ich die IP-Adresse und den Port meiner lokalen SQL Server-Instanz?
  2. Was ist das richtige Format, in das ich die IP-Adresse und den Port in das Feld Servername von SSMS eingeben sollte (und entspricht es dem Format einer Server-Eigenschaft für Verbindungszeichenfolgen)?

Ich habe versucht, die IP-Adresse zu finden, auf der der folgende SQL-Code ausgeführt wird:

SELECT  
   CONNECTIONPROPERTY('net_transport') AS net_transport,
   CONNECTIONPROPERTY('protocol_type') AS protocol_type,
   CONNECTIONPROPERTY('auth_scheme') AS auth_scheme,
   CONNECTIONPROPERTY('local_net_address') AS local_net_address,
   CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
   CONNECTIONPROPERTY('client_net_address') AS client_net_address 

Die Felder local_net_address und local_tcp_port sind jedoch NULL und die client_net_address ist auf Folgendes festgelegt <local machine>:

Ich habe auch versucht, in den SQL Server-Konfigurations-Manager im Abschnitt SQL Server-Netzwerkkonfiguration zu wechseln und TCP / IP zu aktivieren. Dann habe ich versucht, eine Mischung aus IP4- und IP6-Adressen mit Port 1433 zu verwenden (der in den TCP / IP-Eigenschaften standardmäßig leer ist, aber ich habe versucht, ihn leer zu lassen und auf 1433 zu setzen), und das hat nicht funktioniert.

(Ich habe sichergestellt, dass der SQL Server-Dienst und der SQL Server-Browserdienst jedes Mal neu gestartet werden, wenn ich hier Änderungen vorgenommen habe.)

Beim Versuch, eine Verbindung über SSMS für die verschiedenen Kombinationen der IP4-Adresse mit und ohne angegebenem Port herzustellen, sind folgende Fehler aufgetreten:

Kein Port angegeben:

Port angegeben mit Doppelpunkt:

Port angegeben mit Komma:

Ich habe auch versucht, über 127.0.0.1 mit den gleichen Kombinationen von Port 1433 oben eine Verbindung herzustellen, ohne Erfolg. (Ich erhalte ähnliche Fehler mit Ausnahme der folgenden Kombinationen.)

127.0.0.1 ohne Port:

127.0.0.1 mit Port über Komma:

Antworten

2 TiborKaraszi Nov 19 2020 at 16:32

Sie können versuchen, Enabled für alle einzelnen IP-Adressen auf "no" zu setzen und ganz unten den gewünschten Port anzugeben. Ich benutze im Allgemeinen den gleichen Port für alle IPs, also fange ich sie alle mit nur einer Konfiguration ab. Wenn für nichts anderes, als Maßnahme zur Fehlerbehebung.

2 JohnK.N. Nov 19 2020 at 22:17

Die Abfrage, die Sie in einer Verbindung zu Ihrer lokalen Serverinstanz ausführen, gibt die aktuellen Verbindungsinformationen wieder.

Eingang

SELECT  
   CONNECTIONPROPERTY('net_transport') AS net_transport,
   CONNECTIONPROPERTY('protocol_type') AS protocol_type,
   CONNECTIONPROPERTY('auth_scheme') AS auth_scheme,
   CONNECTIONPROPERTY('local_net_address') AS local_net_address,
   CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
   CONNECTIONPROPERTY('client_net_address') AS client_net_address 

Ausgabe

+---------------+---------------+-------------+-------------------+----------------+--------------------+
| net_transport | protocol_type | auth_scheme | local_net_address | local_tcp_port | client_net_address |
+---------------+---------------+-------------+-------------------+----------------+--------------------+
| Shared memory | TSQL          | NTLM        | NULL              | NULL           | <local machine>    |
+---------------+---------------+-------------+-------------------+----------------+--------------------+

Wenn Sie das SSMS-Anmeldefeld öffnen und Ihre Anmeldeinformationen eingeben, stellen Sie eine Verbindung über die Shared-Memory-Verbindung her, ohne den TCP / IP-Stack des Computers zu durchlaufen.

Bestimmen Sie die IP und den Port Ihrer Instanz

Führen Sie den folgenden Befehl in einer Eingabeaufforderung mit erhöhten Rechten aus, um die Prozesse, ausführbaren Dateien und Prozess-IDs der ausgeführten Prozesse abzurufen:

Eingang

C:\> netstat -abon

Ausgabe

  TCP    127.0.0.1:50644        0.0.0.0:0              ABHÖREN         6964
 [sqlservr.exe]

Möglicherweise finden Sie mehrere Einträge für Ihren sqlservr.exe-Prozess. Stellen Sie sicher, dass die Nummer am Ende identisch ist (hier: 6964). Dies ist die Prozess-ID Ihres SQL Server-Dienstes. Öffnen Sie den Task-Manager und überprüfen Sie die Prozess-ID des Prozesses sqlservr.exe für diese Instanz mit der Ausgabe des nestat -abonBefehls. Sie können mehrere Einträge für dieselbe Prozess-ID haben.

Mögliche Einträge

...
  TCP    127.0.0.1:50644        0.0.0.0:0              ABH™REN         6964
 [sqlservr.exe]
  TCP    [::1]:50644            [::]:0                 ABH™REN         6964
 [sqlservr.exe]
  TCP    0.0.0.0:53481          0.0.0.0:0              ABH™REN         6964
 [sqlservr.exe]

Anhand der obigen Informationen kann ich feststellen, dass eine meiner lokalen SQL Server-Instanzen so konfiguriert ist, dass sie IPv4 und IPv6 überwacht und die TCP-Ports 50644 und 53481 verwendet.

Wenn Sie in Ihrem SQL Server-Konfigurationsmanager nach unten scrollen, finden Sie den dynamischen TCP-Port, der von Ihrer lokalen Instanz verwendet wird.

Mit diesen Informationen kann ich versuchen, über das SSMS-Anmeldefeld eine Verbindung herzustellen und das richtige Protokoll festzulegen.

Anmelden bei der SQL Server-Instanz mit SSMS

Öffnen Sie SSMS und geben Sie die IP-Adresse Ihres lokalen Laptops (oder die Adresse 169.254.xxx.xxx aus der TCP / IP SQL Server-Konfiguration) und den dynamischen Port wie folgt ein:

Und du bist dabei!

Überprüfen mit Ihrem Skript

Eingang

SELECT  
   CONNECTIONPROPERTY('net_transport') AS net_transport,
   CONNECTIONPROPERTY('protocol_type') AS protocol_type,
   CONNECTIONPROPERTY('auth_scheme') AS auth_scheme,
   CONNECTIONPROPERTY('local_net_address') AS local_net_address,
   CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
   CONNECTIONPROPERTY('client_net_address') AS client_net_address 

Ausgabe

+---------------+---------------+-------------+-------------------+----------------+--------------------+
| net_transport | protocol_type | auth_scheme | local_net_address | local_tcp_port | client_net_address |
+---------------+---------------+-------------+-------------------+----------------+--------------------+
| TCP           | TSQL          | SQL         |    161.78.198.140 |         -12055 |     161.78.198.140 |
+---------------+---------------+-------------+-------------------+----------------+--------------------+

Erläuterung

In 127.0.0.1:50644meiner netstat -abonAusgabe ist die IPv4-Adresse angegeben, die für die Admin-Verbindung verwendet wird, wenn die TCP / IP-Konfiguration einer lokalen Instanz für die Verwendung dynamischer Ports konfiguriert ist. In meinem Beispiel 127.0.0.1,50644würde das nicht funktionieren.

Dies [::1]:50644gilt auch für IPv6.

In 0.0.0.0:53481dieser Zeile wird erläutert, dass der sqlservr.exe(32) -Prozess alle IP-Adressen am Port 53481auf eine TCP-Verbindung zur SQL Server-Instanz überwacht.

Alternativen

Sehen ERRORLOGSie sich während des Startvorgangs die aktuelle Datei Ihrer Instanz an, um festzustellen, was verwendet werden soll:

...
2020-11-19 15:52:04.29 spid11s     A self-generated certificate was successfully loaded for encryption.
2020-11-19 15:52:04.29 spid11s     Server is listening on [ 'any' <ipv6> 53481]. 
2020-11-19 15:52:04.29 spid11s     Server is listening on [ 'any' <ipv4> 53481]. <<== HERE!!
2020-11-19 15:52:04.29 spid11s     Server local connection provider is ready to accept connection on [ \\.\pipe\SQLLocal\SQL2016CI ].
2020-11-19 15:52:04.29 spid11s     Server local connection provider is ready to accept connection on [ \\.\pipe\MSSQL$SQL2016CI\sql\query ].
2020-11-19 15:52:04.30 Server      Server is listening on [ ::1 <ipv6> 50644].
2020-11-19 15:52:04.30 Server      Server is listening on [ 127.0.0.1 <ipv4> 50644].
2020-11-19 15:52:04.30 Server      Dedicated admin connection support was established for listening locally on port 50644. <<== HERE!!
...

Viel Glück.


Mein Referenzbeitrag Was sind gültige Verbindungszeichenfolgen für das SSMS-Anmeldefeld? Bei Setups mit mehreren Instanzen, mit denen TCP / IP-Einstellungen auf einem einzelnen Computer ausgeführt werden können, finden Sie weitere Informationen dazu, was Sie bei Konfigurationen mit mehreren Instanzen auf einem Server / Laptop erwarten können.