Jak połączyć się z lokalną instancją SQL Server za pomocą adresu IP w SQL Server Management Studio? [duplikować]

Nov 19 2020

Piszę kod testowy, który jest wymagany do połączenia się z lokalną instancją SQL Server (SQL Server 2017 - Developer Edition) za pomocą adresu IP. Mam zainstalowaną i uruchomioną instancję SQL Server na moim komputerze, ale nie mogę znaleźć prawidłowego adresu IP + port do użycia dla właściwości serwera moich parametrów połączenia.

Na początek próbuję przynajmniej ręcznie połączyć się z moją instancją serwera za pomocą programu SQL Server Management Studio (za pośrednictwem adresu IP), ale nie mogę tego rozgryźć.

  1. Jak znaleźć adres IP i port mojego lokalnego wystąpienia programu SQL Server?
  2. Jaki jest prawidłowy format, który powinienem wprowadzać adres IP i port w polu Nazwa serwera w programie SSMS (i czy jest to ten sam format, co właściwość serwera parametrów połączenia)?

Próbowałem zlokalizować adres IP, wykonując na nim następujący kod SQL:

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 

Ale pola local_net_address i local_tcp_port mają wartość NULL, a client_net_address jest ustawiony na <local machine>:

Próbowałem też wejść do SQL Server Configuration Manager w sekcji SQL Server Network Configuration i włączyć TCP / IP. Następnie próbowałem użyć kombinacji adresów IP4 i IP6 z Portem 1433 (który jest domyślnie pusty we właściwościach TCP / IP, ale próbowałem pozostawić to pole puste i ustawić na 1433) i to nie zadziałało.

(Upewniłem się, że ponownie uruchamiam usługę SQL Server i usługę SQL Server Browser za każdym razem, gdy wprowadzam tutaj zmiany).

Otrzymałem następujące błędy podczas próby połączenia przez SSMS dla różnych kombinacji adresu IP4 z określonym portem i bez niego:

Nie określono portu:

Określony port z dwukropkiem:

Port określony z przecinkiem:

Próbowałem również połączyć się przez 127.0.0.1 z tymi samymi kombinacjami portu 1433 powyżej, ale bezskutecznie. (Otrzymuję podobne błędy z wyjątkiem poniższych kombinacji.)

127.0.0.1 bez portu:

127.0.0.1 z portem przecinkiem:

Odpowiedzi

2 TiborKaraszi Nov 19 2020 at 16:32

Jedną z rzeczy, które możesz spróbować, jest ustawienie Enabled na „no” dla wszystkich indywidualnych adresów IP, a na samym dole określ żądany port. Generalnie używam tego samego portu dla wszystkich adresów IP, więc łapię je wszystkie za pomocą tylko jednej konfiguracji. Na nic innego, jako środek zaradczy.

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

Zapytanie uruchamiane w ramach połączenia z lokalną instancją serwera będzie odzwierciedlać bieżące informacje o połączeniu.

Wejście

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 

Wynik

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

Kiedy otworzysz okno logowania SSMS i wprowadzisz swoje poświadczenia, będziesz łączyć się za pomocą połączenia z pamięcią współdzieloną, co zasadniczo nie wymaga przechodzenia przez stos TCP / IP komputera.

Określ adres IP i port swojej instancji

Uruchom następujące polecenie w wierszu polecenia z podwyższonym poziomem uprawnień, aby pobrać procesy, pliki wykonywalne i identyfikatory procesów uruchomionych procesów:

Wejście

C:\> netstat -abon

Wynik

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

Możesz znaleźć wiele wpisów dla procesu sqlservr.exe. Sprawdź, czy numer na końcu jest taki sam (tutaj: 6964). To jest identyfikator procesu usługi SQL Server. Otwórz Menedżera zadań i sprawdź identyfikator procesu sqlservr.exe dla tej instancji z danymi wyjściowymi nestat -abonkomendy. Możesz mieć wiele wpisów dla tego samego identyfikatora procesu.

Możliwe wpisy

...
  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]

Patrząc na powyższe informacje, mogę stwierdzić, że jedna z moich lokalnych instancji SQL Server jest skonfigurowana do nasłuchiwania na protokołach IPv4 i IPv6 oraz używa portów TCP 50644 i 53481.

W menedżerze konfiguracji serwera SQL, jeśli przewiniesz w dół, znajdziesz dynamiczny port TCP używany przez lokalną instancję.

Mając te informacje, mogę spróbować połączyć się za pomocą pola logowania SSMS i ustawić odpowiedni protokół.

Logowanie się do wystąpienia programu SQL Server za pomocą programu SSMS

Otwórz SSMS i wprowadź adres IP swojego lokalnego laptopa (lub adres 169.254.xxx.xxx z konfiguracji TCP / IP SQL Server) i dynamiczny port w następujący sposób:

I jesteś w środku!

Weryfikacja za pomocą skryptu

Wejście

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 

Wynik

+---------------+---------------+-------------+-------------------+----------------+--------------------+
| 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 |
+---------------+---------------+-------------+-------------------+----------------+--------------------+

Wyjaśnienie

127.0.0.1:50644W moim netstat -abonwyjściem jest adres IPv4 wykorzystywany do podłączenia Admin jeśli konfiguracja TCP / IP lokalnej instancji jest skonfigurowany do korzystania z portów dynamicznych. W moim przykładzie 127.0.0.1,50644nie zadziała.

To [::1]:50644samo dotyczy IPv6.

To 0.0.0.0:53481wiersz wyjaśniający, że proces sqlservr.exe(32) nasłuchuje na wszystkich adresach IP na porcie w 53481poszukiwaniu połączenia TCP z instancją SQL Server.

Alternatywy

Sprawdź bieżący ERRORLOGplik instancji podczas procedury uruchamiania, aby określić, czego użyć:

...
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!!
...

Powodzenia.


Mój wpis referencyjny Jakie są prawidłowe parametry połączenia dla pola logowania SSMS? w konfiguracjach z wieloma instancjami, aby uzyskać ustawienia TCP / IP i uruchomić je na jednym komputerze, zawiera więcej informacji na temat tego, czego można się spodziewać w konfiguracjach z wieloma instancjami na jednym serwerze / laptopie.