SQL Server的配置管理器(SQL Server Configuration Manager)下,你可以隱藏資料庫實例,設置了隱藏實例後, SQL Server Browser不會對此伺服器實例的相關信息做出響應,(當 SQL Server 客戶端請求 SQL Server 資源時,客戶端將使 ...
SQL Server的配置管理器(SQL Server Configuration Manager)下,你可以隱藏資料庫實例,設置了隱藏實例後, SQL Server Browser不會對此伺服器實例的相關信息做出響應,(當 SQL Server 客戶端請求 SQL Server 資源時,客戶端將使用 1434 埠向伺服器發送一條 UDP 消息。SQL Server 瀏覽器將用請求的實例的 TCP/IP 埠或命名管道做出響應。然後,客戶端應用程式將使用所需實例的埠或命名管道向伺服器發送請求來完成連接。),此時,如果你沒有提供正確的埠號或命名管道,由於SQL Server Browser又不會對客戶端的連接做出響應,那麼除非你指定實例名和埠號,否則就會連接不上SQL Server。有些公司的安全規範,會要求設置隱藏SQL Server實例。這樣防止別人掃描獲取SQL Server資料庫實例信息。
如何隱藏SQL Server實例:
在“SQL Server 配置管理器”中,展開“SQL Server 網路配置”、右鍵單擊“<伺服器實例> 的協議”,然後選擇“屬性”。
在 “標誌” 選項卡的 “隱藏實例” 框中,選擇 “是” ,然後單擊 “確定” 關閉對話框。 對於新連接,更改會立即生效
如果SQL Server AlwaysOn的實例設置隱藏實例後,手動故障轉移時,你可能連接不到輔助節點。此時你可能遇到下麵錯誤(這裡的測試環境為SQL Server 2019, Tcp埠設置為靜態埠14033): SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified
遇到這個錯誤的時候,一般會從下麵幾個方面去排查:
確保伺服器名稱或IP正確無誤,例如,伺服器名稱上沒有錯別字。 確保實例名稱(Server Instance)正確無誤。 確保伺服器機器是可訪問的,例如,DNS可以正確解析,你可以ping伺服器(並不總是true)。 確保 SQL Browser 服務正在伺服器上運行。 如果在伺服器上啟用了防火牆,則需要將sqlbrowser.exe和/或UDP埠1434置於例外狀態。
這幾方面都排查過後,檢測發現1434 UDP埠狀態異常,防火牆也放開了UDP 1434埠
SQL Server隱藏實例的情況:
C:\PortQryUI>portqry.exe -n 192.168.63.217 -p udp -e 1434
Querying target system called:
192.168.63.217
Attempting to resolve IP address to a name...
IP address resolved to ****
querying...
UDP port 1434 (ms-sql-m service): LISTENING or FILTERED
Sending SQL Server query to UDP port 1434...
UDP port 1434 (ms-sql-m service): FILTERED
SQL Server取消隱藏實例的情況
C:\PortQryUI>portqry.exe -n 192.168.63.217 -p udp -e 1434
Querying target system called:
192.168.63.217
Attempting to resolve IP address to a name...
IP address resolved to ****
querying...
UDP port 1434 (ms-sql-m service): LISTENING or FILTERED
Sending SQL Server query to UDP port 1434...
Server's response:
ServerName ****
InstanceName MSSQLSERVER
IsClustered No
Version 15.0.2000.5
tcp 14033
==== End of SQL Server query response ====
UDP port 1434 is LISTENING
官方文檔[1]還提示,隱藏實例可能會導致“故障轉移群集資源死鎖”,如下所示:
如果隱藏群集命名實例,當 LastConnect 註冊表項 (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI11.0\LastConnect) 具有的埠與SQL Server 正在偵聽的埠不同時,群集服務可能無法連接到 SQL Server。 如果群集服務無法建立與 SQL Server的連接,則你可能會看到類似於以下內容的錯誤:
事件 ID:1001:事件名稱:故障轉移群集資源死鎖。
參考資料
官方文檔: https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/hide-an-instance-of-sql-server-database-engine?view=sql-server-ver16