網路通訊協定和 TDS 端點

當 SQL Server Database Engine 與應用程式通訊時,它會以稱為「表格式資料流」 (TDS) 封包的 Microsoft 通訊格式來格式化通訊。網路 SQL Server 網路介面 (SNI) 通訊協定層 (取代 SQL Server 2000 和 Microsoft Data Access Components (MDAC) 的網路程式庫) 會封裝標準通訊協定 (例如 TCP/IP 或具名管道) 內的 TDS 封包。SNI 通訊協定層通用於 Database Engine 和 SQL Server Native Client。SNI 通訊協定層並無法直接予以設定。但是,伺服器與 SQL Server Native Client 是設定為使用網路通訊協定。接著,Database Engine 和 SQL Server Native Client 會自動使用適當的通訊協定設定。伺服器會針對每個網路通訊協定建立名稱為「TDS 端點」的 SQL Server 物件。在 SQL Server 安裝期間,是由 SQL Server 在伺服器上安裝 TDS 端點。

本主題描述伺服器如何建立和使用 TDS 端點。如需有關如何設定伺服器的詳細資訊,請參閱<設定伺服器網路通訊協定與網路程式庫>。

在用戶端電腦上,必須安裝和設定 SQL Server Native Client,以使用在伺服器上啟用的網路通訊協定。如需有關用戶端的詳細資訊,請參閱<設定用戶端網路通訊協定>。

設定之後啟用伺服器通訊協定

基礎作業系統網路通訊協定 (例如 TCP/IP) 應該已經安裝在用戶端與伺服器上。網路通訊協定通常會在 Windows 安裝期間安裝;它們並不屬於 SQL Server 安裝程式的一部分。如果必要網路通訊協定無法使用,且設定在伺服器上,則不會啟動 Database Engine。如果必要網路通訊協定無法使用,且設定在用戶端上,則網路程式庫將無法運作。

[!附註]

在本主題其餘部分中,「啟用通訊協定」表示啟用 SQL Server 的通訊協定,而不是啟用作業系統的通訊協定。

那些需要從另一部電腦與 SQL Server 通訊的網路通訊協定,通常在安裝期間不會針對 SQL Server 而啟用。因此,為了從用戶端電腦進行連接,您必須啟用 TCP/IP、具名管道或 VIA 通訊協定。(在所有的安裝上預設會啟用共用的記憶體通訊協定,但只能用以從相同電腦上的用戶端應用程式來連接到 Database Engine。)如需哪一類型的安裝會啟用哪些網路通訊協定的詳細資訊,請參閱<預設 SQL Server 網路組態>。

若要啟用網路通訊協定,請使用 SQL Server 組態管理員。您可以在命令提示下使用選項,以便在安裝期間啟用通訊協定。如需詳細資訊,請參閱<如何:從命令提示字元安裝 SQL Server 2008 R2>。

在安裝及設定網路連線之後,SQL Server 便能同時接聽任意組合的伺服器網路通訊協定。

已定義 TDS 端點

TDS 端點就是 SQL Server 物件,代表 SQL Server 與用戶端之間的通訊點。SQL Server 會自動為 SQL Server 所支援的四個通訊協定建立端點。依預設,當啟用通訊協定時,所有的使用者都有存取權。如果未啟用網路通訊協定,端點仍然會存在,但無法使用。針對專用管理員連接 (DAC) 所建立的其他端點,只能由系統管理員 (sysadmin) 固定伺服器角色的成員使用。

SQL Server 為每個 TDS 端點產生唯一的名稱。自動建立的端點如下表所示。

用途

端點名稱

共用記憶體

TSQL LocalMachine

具名管道

TSQL 具名管道

TCP/IP

TSQL 預設 TCP

VIA

TSQL Default VIA

DAC

Dedicated Admin Connection

HTTP

超文字傳輸通訊協定

若為具名管道和共用記憶體通訊協定,則每個執行個體都只能有一個端點。這些通訊協定類型沒有可設定的端點。至於 TCP/IP 與 VIA,則有預設的端點,但是也可以建立其他的端點。HTTP 端點也是使用者建立的,但不會出現在「SQL Server 組態管理員」中。

重要事項重要事項

VIA 通訊協定已被取代。未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

在系統端點上只能變更擁有者與狀態 (透過 ALTER ENDPOINT)。您無法停用預設端點,但是您可以停止和啟動它們。停止的端點仍然會接聽,但是它會拒絕和關閉新的連接。

[!附註]

依預設,會設定用戶端以嘗試所有的通訊協定,直到其中一個成功為止。如果停用 TCP/IP 通訊協定,用戶端會繼續使用下一個通訊協定。如果已啟用 TCP/IP 但停止了端點,就不會拒絕連接嘗試,因此用戶端不會嘗試其他的通訊協定,但是無法使用已停止的連接。在此情況下,您必須明確地連接到使用中端點。

動態 TCP 通訊埠通常會連接到預設的 TCP 端點。

在登錄中的通訊協定設定

TDS 端點的設定值是記錄在登錄中。使用者應該使用 Transact-SQL 陳述式建立或修改端點,並使用「SQL Server 組態管理員」啟用或停用通訊協定,以啟動和停止端點。

當使用者變更登錄中的通訊協定設定時,並不會發生任何事。登錄與中繼資料是分開的。

將使用者連接與端點關聯

連接到 Database Engine 時,SQL Server 會將連接與特定端點產生關聯,並評估是否已授與使用端點的權限給連接登入。連接將會與下列項目關聯:

  • 共用記憶體連結會使用 TSQL LocalMachine 端點。

  • 具名管道連接會使用 TSQL 具名管道端點。

  • 專用管理員連接會使用 Dedicated Admin Connection 端點。

  • 依預設,TCP 連接會使用 TSQL Default TCP 端點。如果為特定 TCP 通訊埠建立了新的 (使用者自訂) TCP 端點,連接到該 TCP 通訊埠將會連接到該新的端點。如果使用 IP_ANY 作為通訊埠以建立新的 TCP/TSQL 端點,則 TCP 連接將會連接到該新的端點。

  • 會使用與 TCP 連接相同的方式來處理 VIA 連接。

使用者自訂端點的行為方式與預設端點的行為方式相同。當針對某個 IP 位址 (或所有的 IP 位址,透過使用 IP_ANY) 與特定 TCP 通訊埠建立端點時,會在稱為「提供」(Provisioning) 的處理序中,授與使用者連接到端點的權限。不論伺服器實際上是否接聽 IP 位址/TCP 通訊埠組合,它們都會保留「提供」。在 IP 位址與 TCP 通訊埠的連接符合下列順序的端點:

  1. 如果 IP 位址與 TCP 通訊埠完全符合端點的 IP 位址與 TCP 通訊埠,就會使用端點。

  2. 如果沒有完全符合,TCP 通訊埠會針對所有的 IP_ANY 端點檢查,而且如果列出 TCP 通訊埠,就會使用該端點。

  3. 如果沒有完全相同的通訊埠,就會使用預設的 TCP 端點。

連接關聯處理序永遠都會選取最多一個端點。將會針對該端點檢查連接權限。如果使用者沒有該端點的權限,處理序就不會搜尋下一個端點。

範例:將使用者連接與端點關聯

下列範例說明如何使用 IP 位址與 TCP 通訊埠選取端點。假設將伺服器設定為接聽下列 IP 位址與 TCP 通訊埠:

127.0.0.1:1533

並進一步假設建立了下列 TCP 端點:

端點名稱

已設定的值

Loopback

LISTENER_IP= 127.0.0.1 與 LISTENER_PORT = 1533

Remote

LISTENER_IP = ALL 與 LISTENER_PORT = 1533

TSQL 預設 TCP

未連結到任何 IP 位址或通訊埠

有三種可能的連接:

  • 如果用戶端建立連接到 127.0.0.1:1533 的 TCP 連接,與工作階段關聯的端點將會是 Loopback 端點,因為有完全相符的 IP 位址與 TCP 通訊埠連接到 Loopback 端點。

  • 如果用戶端建立連接到 251.40.20.151:1533 的 TCP 連接,就不會有與端點完全相符的 IP 位址與 TCP 通訊埠,但仍然可使用 Remote 來進行連接,因為 Remote 會接聽任何 IP 位址與通訊埠 1533。如果連接登入沒有 Remote 端點的權限,處理就會失敗。它不會嘗試連接其他該登入可能擁有權限的端點,例如 TSQL Default TCP。

  • 如果用戶端建立連接到 251.40.20.151:1433 的 TCP 連接,就不會有與端點完全相符的 IP 位址與 TCP 通訊埠,而且任何 IP 位址都沒有相符的 TCP 通訊埠 1533,但仍然可使用 TSQL Default TCP 來進行連接,因為 TSQL Default TCP 會接聽任何 IP 位址與任何通訊埠。

升級和/或安裝

所有使用者預設都可以存取 TDS 端點 (但不包含專用管理員連接端點)。由於這些端點都是由伺服器在內部所建立,它們並沒有擁有者,因此您無法將它們與特定帳戶關聯。

使用 Transact-SQL 來管理端點

端點是使用 Transact-SQL 來建立和管理。它們是使用 CREATE ENDPOINT 與 DROP ENDPOINT 陳述式來建立和卸除。也有可控制、修改和取得端點擁有權的陳述式。

若要使用 Transact-SQL 端點連接到 SQL Server 執行個體,則使用者必須擁有端點的 CONNECT 權限和 SQL Server 的全域權限才能登入。在建立登入時,會隱含地將連接到預設端點的權限授與使用者。存取端點是使用 GRANT | DENY | REVOKE CONNECT ON ENDPOINT 來管理。

當建立新的 TCP 端點時,SQL Server 會自動撤銷 TSQL Default TCP 端點的所有現有權限。如需有關如何建立新 TCP 端點的範例,請參閱<如何:設定 Database Engine 接聽多個 TCP 通訊埠>。

  • 若要限制端點的存取,管理員可以拒絕 EVERYONE 群組的權限 (使用 DENY CONNECT 陳述式),然後將權限授與特定的個人或角色 (使用 GRANT CONNECT 陳述式)。

  • 若要將權限恢復成原始狀態,請將 GRANT CONNECT 權限授與 PUBLIC 群組。

  • 若要為特定應用程式提供端點,除了該應用程式的使用者以外,請將 DENY CONNECT 權限授與所有的使用者。

安全性注意事項安全性注意事項

使用端點的授權與端點的名稱關聯。如果端點名稱變更,則無法正確地套用安全性限制 (例如,DENY CONNECT 陳述式)。當通訊埠變更時,端點的名稱也會變更。如果 SQL Server 接聽的是動態通訊埠,則通訊埠可能會變更,並變更端點名稱,以及卸除關聯的端點權限。若要避免此安全性風險,請勿在與動態通訊埠關聯的端點上設定自訂權限,而且請勿變更登錄中 TCP/IP 端點發生的順序。

如需如何設定端點安全性的詳細資訊,請參閱<GRANT 端點權限 (Transact-SQL)>。