Sql-Server

如何在 SQL Server Management Studio 中通過 IP 地址連接到本地 SQL Server 實例?

  • November 19, 2020

我正在編寫一些通過 IP 地址連接到本地 SQL Server 實例(SQL Server 2017 - Developer Edition)所需的測試程式碼。我在我的機器上啟動並執行了 SQL Server 實例,但無法確定用於連接字元串的 Server 屬性的正確 IP + 埠。

作為一個起點,我至少嘗試使用 SQL Server Management Studio(通過 IP 地址)手動連接到我的伺服器實例,但我似乎無法弄清楚。

  1. 如何找到本地 SQL Server 實例的 IP 地址和埠?
  2. 我應該將 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 配置管理器,在 SQL Server 網路配置部分下,並啟用 TCP/IP。然後我嘗試將 IP4 和 IP6 地址與埠 1433(在 TCP/IP 屬性中預設為空白,但我嘗試將其保留為空白並將其設置為 1433)混合使用,但沒有奏效。

SQL Server 配置管理器 - SQL Server 網路配置 (每次在這裡進行更改時,我都會確保重新啟動 SQL Server 服務和 SQL Server Browser 服務。)

在嘗試通過 SSMS 連接指定和不指定埠的 IP4 地址的不同組合時,我收到以下錯誤:

未指定埠:

IP4 無埠

帶有冒號的指定埠:

IP4 帶埠通過冒號

使用逗號指定的埠: 通過逗號指定的埠

我也嘗試通過 127.0.0.1 與上述埠 1433 的相同組合進行連接,但無濟於事。(除了以下組合外,我收到類似的錯誤。)

127.0.0.1 w/o 埠:

本地主機 IP 無埠

127.0.0.1 w / 逗號埠:

本地主機 IP 和埠通過逗號

您可以嘗試的一件事是將所有單個 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 動態埠。

SQL Server 實例的 TCP 屬性視窗

有了這些資訊,我可以嘗試使用 SSMS 登錄框進行連接並設置正確的協議。

使用 SSMS 登錄 SQL Server 實例

打開 SSMS 並輸入本地筆記型電腦的 IP 地址(或 TCP/IP SQL Server 配置中的 169.254.xxx.xxx 地址)和動態埠,如下所示:

SSMS 登錄視窗

你進來了!

使用您的腳本進行驗證

輸入

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]:50644IPv6 也是如此。

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 設置包含有關在一台伺服器/筆記型電腦上使用多實例配置的更多資訊。


引用自:https://dba.stackexchange.com/questions/279936