SQL Server Browser 服務 (Database Engine 和 SSAS)

適用於:SQL Server

SQL Server Browser 程式會以 Windows 服務的方式執行。 SQL Server Browser 會接聽 Microsoft SQL Server 資源的內送要求,並提供在電腦上安裝 SQL Server 執行個體的相關資訊。 SQL Server Browser 可協助執行下列動作:

  • 瀏覽可用伺服器的清單

  • 連接到正確的伺服器執行個體

  • 連接到專用管理員連接 (DAC) 端點

針對資料庫引擎和 SSAS 的每個執行個體,SQL Server Browser 服務 (sqlbrowser) 會提供執行個體名稱和版本號碼。 SQL Server Browser 會隨 SQL Server 一起安裝。

SQL Server Browser 可以在安裝過程中設定,或透過使用 SQL Server 組態管理員來設定。 根據預設,SQL Server Browser 服務會在下列情況下自動啟動:

  • 升級安裝時。

  • 在叢集上安裝時。

  • 安裝資料庫引擎的具名執行個體 (包括所有 SQL Server Express 執行個體) 時。

  • 安裝 Analysis Services 的具名執行個體時。

背景

在 SQL Server 2000 (8.x) 之前,一部電腦上只能安裝一個 SQL Server 執行個體。 SQL Server 會在官方 Internet Assigned Numbers Authority (IANA) 指派給 SQL Server 的連接埠 1433 上接聽內送要求。 只有一個 SQL Server 執行個體可以使用連接埠,因此當 SQL Server 2000 (8.x) 推出多個 SQL Server 執行個體的支援時,還開發了 SQL Server Resolution Protocol (SSRP) 來接聽 UDP 連接埠 1434。 此接聽服務是以安裝的執行個體名稱,以及執行個體使用的通訊埠或具名管道來回應用戶端要求。 為了解決 SSRP 系統的限制,SQL Server 2005 (9.x) 推出 SQL Server Browser 服務來取代 SSRP。

SQL Server Browser 如何運作

當 SQL Server 的執行個體啟動時,如果已為 SQL Server 啟用 TCP/IP 通訊協定,則會指派 TCP/IP 連接埠給伺服器。 如果已啟用具名管道通訊協定,則 SQL Server 會接聽特定具名管道。 這個通訊埠或「管道」是由該特定執行個體使用,來與用戶端應用程式交換資料。 在安裝期間,會將 TCP 通訊埠 1433 和管道 \sql\query 指派給預設執行個體,但之後伺服器管理員可以使用 SQL Server 組態管理員進行變更。 由於只有一個 SQL Server 執行個體可以使用連接埠或管道,因此會指派不同的連接埠號碼和管道名稱給具名執行個體,包括 SQL Server Express。 具名執行個體和 SQL Server Express 在啟用時,預設都已設定為使用動態連接埠;也就是說,當 SQL Server 啟動時,會指派可用的連接埠。 如果需要,也可以將特定連接埠指派給 SQL Server 執行個體。 連接時,用戶端可以指定特定連接埠;但如果該連接埠是動態指派的,則每當 SQL Server 重新啟動時,連接埠號碼可能會變更,導致用戶端不知道正確的連接埠號碼。

啟動時,SQL Server Browser 會啟動並要求 UDP 連接埠 1434。 SQL Server Browser 會讀取登錄、識別電腦上的所有 SQL Server 執行個體,並記下這些執行個體所使用的連接埠和具名管道。 當伺服器具有兩張或多張網路卡時,SQL Server Browser 會傳回其所發現第一個為 SQL Server 啟用的連接埠。 SQL Server Browser 支援 ipv6 和 ipv4。

當 SQL Server 用戶端要求 SQL Server 資源時,用戶端網路程式庫會使用連接埠 1434 將 UDP 訊息傳送至伺服器。 SQL Server Browser 會以所要求執行個體的 TCP/IP 連接埠或具名管道回應。 於是,用戶端應用程式上的網路程式庫會使用所要的執行個體的通訊埠或具名管道,將要求傳送至伺服器來完成連接。 SQL Server Browser 服務不提供預設執行個體的連接埠解析。

如需啟動和停止 SQL Server Browser 服務的相關資訊,請參閱啟動、停止、暫停、繼續、重新啟動資料庫引擎、SQL Server Agent 或 SQL Server Browser 服務

使用 SQL Server Browser

如果 SQL Server Browser 服務並未執行,但您提供正確的連接埠號碼或具名管道,則仍可連接到 SQL Server。 例如,您可以使用在連接埠 1433 執行的 TCP/IP 連接到 SQL Server 的預設執行個體。

不過,如果 SQL Server Browser 服務並未執行,則下列連接沒有作用:

  • 任何嘗試連接到具名執行個體卻未完整指定所有參數 (例如 TCP/IP 通訊埠或具名管道) 的元件。

  • 任何產生或傳遞伺服器/執行個體資訊的元件,稍後要重新連接的其他元件可使用此資訊。

  • 連接到具名執行個體但未提供通訊埠編號或管道。

  • 具名執行個體或預設執行個體的 DAC (若未使用 TCP/IP 連接埠 1433)。

  • OLAP 重新導向程式服務。

  • 列舉 SQL Server Management Studio、Enterprise Manager 或 Query Analyzer 中的伺服器。

當您在主從情況下使用 SQL Server 時 (例如當您的應用程式透過網路存取 SQL Server 時),如果您停止或停用 SQL Server Browser 服務,則必須對每個執行個體指派特定連接埠號碼,並撰寫用戶端應用程式程式碼以一律使用該連接埠號碼。 此方式有下列問題:

  • 您必須更新或維護用戶端應用程式碼,才能確保它是連接到正確的通訊埠。

  • 您為每個執行個體選取的連接埠可能正由該伺服器上的其他服務或應用程式使用中,導致 SQL Server 的執行個體無法使用。

叢集

SQL Server Browser 不是叢集資源,不支援一個叢集節點容錯移轉到另一個叢集節點。 因此,在叢集的情況下,應該要為叢集的每個節點安裝及開啟 SQL Server Browser。 在叢集上,SQL Server Browser 會接聽 IP_ANY。

注意

接聽 IP_ANY 時,若您啟用的是接聽特定 IP,則使用者必須在每個 IP 上設定相同的 TCP 通訊埠,因為 SQL Server Browser 會傳回其所發現的第一個 IP/連接埠組合。

從命令列安裝、解除安裝和執行

根據預設,SQL Server Browser 程式會安裝在 C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe。

移除 SQL Server 的最後一個執行個體之後,就會解除安裝 SQL Server Browser 服務。

SQL Server Browser 可以使用 -c 參數從命令提示字元啟動來進行疑難排解:

<drive>\<path>\sqlbrowser.exe -c  

安全性

帳戶權限

SQL Server Browser 可接聽 UDP 連接埠,並使用 SQL Server Resolution Protocol (SSRP) 來接受未驗證的要求。 SQL Server Browser 應該在低權限使用者的資訊安全內容中執行,以降低遭受惡意攻擊的機會。 可利用 SQL Server 組態管理員來變更登入帳戶。 SQL Server Browser 所需的最低使用者權限如下:

  • 拒絕從網路存取這部電腦

  • 拒絕本機登入

  • 拒絕以批次作業登入

  • 拒絕透過終端機服務登入

  • 登入為服務

  • 讀取及寫入與網路通訊 (連接埠和管道) 相關的 SQL Server 登錄機碼

預設帳戶

在安裝過程中,安裝程式會設定 SQL Server Browser 使用針對服務選取的帳戶。 其他可能的帳戶包括下列各項:

  • 任何 網域\本機 帳戶

  • [本機服務] 帳戶

  • 本機系統 帳戶 (不建議使用,因為有不必要的權限)

隱藏 SQL Server

隱藏的執行個體是只支援共用記憶體連接的 SQL Server 執行個體。 對於 SQL Server,請設定 HideInstance 旗標以指示 SQL Server Browser 不應使用有關此伺服器執行個體的資訊來回應。

使用防火牆

若要與位於防火牆後面之伺服器上的 SQL Server Browser 服務進行通訊,除了 SQL Server 使用的 TCP 通訊埠 (例如 1433) 之外,請開啟 UDP 連接埠 1434。 如需使用防火牆的詳細資訊,請參閱《SQL Server 線上叢書》中的<如何設定防火牆供 SQL Server 存取>。

另請參閱

網路通訊協定和網路程式庫
隱藏 SQL Server 資料庫引擎的執行個體