如何在 SQL Server Management Studio 中通過 IP 地址連接到本地 SQL Server 實例?
我正在編寫一些通過 IP 地址連接到本地 SQL Server 實例(SQL Server 2017 - Developer Edition)所需的測試程式碼。我在我的機器上啟動並執行了 SQL Server 實例,但無法確定用於連接字元串的 Server 屬性的正確 IP + 埠。
作為一個起點,我至少嘗試使用 SQL Server Management Studio(通過 IP 地址)手動連接到我的伺服器實例,但我似乎無法弄清楚。
- 如何找到本地 SQL Server 實例的 IP 地址和埠?
- 我應該將 IP 地址和埠輸入到 SSMS 的伺服器名稱欄位中的正確格式是什麼(它與連接字元串伺服器屬性的格式是否相同)?
我嘗試找到在其上執行以下 SQL 程式碼的 IP 地址:
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
但是 local_net_address 和 local_tcp_port 欄位為 NULL 並且 client_net_address 設置為
<local machine>
:我還嘗試進入 SQL Server 配置管理器,在 SQL Server 網路配置部分下,並啟用 TCP/IP。然後我嘗試將 IP4 和 IP6 地址與埠 1433(在 TCP/IP 屬性中預設為空白,但我嘗試將其保留為空白並將其設置為 1433)混合使用,但沒有奏效。
(每次在這裡進行更改時,我都會確保重新啟動 SQL Server 服務和 SQL Server Browser 服務。)
在嘗試通過 SSMS 連接指定和不指定埠的 IP4 地址的不同組合時,我收到以下錯誤:
未指定埠:
帶有冒號的指定埠:
我也嘗試通過 127.0.0.1 與上述埠 1433 的相同組合進行連接,但無濟於事。(除了以下組合外,我收到類似的錯誤。)
127.0.0.1 w/o 埠:
127.0.0.1 w / 逗號埠:
您可以嘗試的一件事是將所有單個 IP 地址的啟用設置為“否”,並在最底部指定所需的埠。我通常對所有 IP 使用相同的埠,所以我只用一個配置就可以擷取它們。如果沒有別的,作為故障排除措施。
您在與本地伺服器實例的連接中執行的查詢將反映目前的連接資訊。
輸入
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
輸出
+---------------+---------------+-------------+-------------------+----------------+--------------------+ | net_transport | protocol_type | auth_scheme | local_net_address | local_tcp_port | client_net_address | +---------------+---------------+-------------+-------------------+----------------+--------------------+ | Shared memory | TSQL | NTLM | NULL | NULL | <local machine> | +---------------+---------------+-------------+-------------------+----------------+--------------------+
當您打開 SSMS 登錄框並輸入您的憑據時,您將使用共享記憶體連接進行連接,這基本上無需通過電腦的 TCP/IP 堆棧。
確定實例的 IP 和埠
在提升的命令提示符中執行以下命令以檢索正在執行的程序的程序、執行檔和程序 ID:
輸入
C:\> netstat -abon
輸出
TCP 127.0.0.1:50644 0.0.0.0:0 ABHÖREN 6964 [sqlservr.exe]
您可能會為您的 sqlservr.exe 程序找到多個條目。驗證末尾的數字是否相同(此處為:6964)。這是 SQL Server 服務的程序 ID。
nestat -abon
打開任務管理器並使用命令的輸出檢查該實例的 sqlservr.exe 程序的程序 ID 。同一個程序 ID 可以有多個條目。可能的條目
... 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]
查看上述資訊,我可以確定我的一個本地 SQL Server 實例配置為偵聽 IPv4 和 IPv6 並使用 TCP 埠 50644 和 53481。
在 SQL Server 配置管理器中,如果您向下滾動到底部,您將找到本地實例正在使用的 TCP 動態埠。
有了這些資訊,我可以嘗試使用 SSMS 登錄框進行連接並設置正確的協議。
使用 SSMS 登錄 SQL Server 實例
打開 SSMS 並輸入本地筆記型電腦的 IP 地址(或 TCP/IP SQL Server 配置中的 169.254.xxx.xxx 地址)和動態埠,如下所示:
你進來了!
使用您的腳本進行驗證
輸入
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
輸出
+---------------+---------------+-------------+-------------------+----------------+--------------------+ | 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 | +---------------+---------------+-------------+-------------------+----------------+--------------------+
解釋
如果本地實例的TCP/IP 配置配置為使用動態埠,則
127.0.0.1:50644
我的netstat -abon
輸出中的 IPv4 地址是用於管理連接的 IPv4 地址。在我的例子127.0.0.1,50644
中是行不通的。
[::1]:50644
IPv6 也是如此。該
0.0.0.0:53481
行解釋了sqlservr.exe
(32) 程序正在偵聽埠上的所有 IP 地址,53481
以便與 SQL Server 實例建立 TCP 連接。備擇方案
在啟動過程中查看實例的目前
ERRORLOG
文件以確定使用什麼:... 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!! ...
祝你好運。
我的參考文章什麼是 SSMS 登錄框的有效連接字元串?關於多實例設置以在單台電腦上啟動和執行 TCP/IP 設置包含有關在一台伺服器/筆記型電腦上使用多實例配置的更多資訊。