Jak połączyć się z lokalną instancją SQL Server za pomocą adresu IP w SQL Server Management Studio? [duplikować]
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źć.
- Jak znaleźć adres IP i port mojego lokalnego wystąpienia programu SQL Server?
- 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.

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

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 -abon
komendy. 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:50644
W moim netstat -abon
wyjś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,50644
nie zadziała.
To [::1]:50644
samo dotyczy IPv6.
To 0.0.0.0:53481
wiersz wyjaśniający, że proces sqlservr.exe
(32) nasłuchuje na wszystkich adresach IP na porcie w 53481
poszukiwaniu połączenia TCP z instancją SQL Server.
Alternatywy
Sprawdź bieżący ERRORLOG
plik 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.