共用方式為


使用者可能無法使用 TCP/IP 通訊協定從遠端連線到 SQL Server

本文可協助您解決無法使用 TCP/IP 通訊協定從遠端連線到 SQL Server 的問題。

原始產品版本: SQL S
原始 KB 編號: 2018930

徵狀

使用 Microsoft SQL Server 時,您可能會看到下列一或多個徵兆:

  • 例如,只有具有 CONTROL SERVER 許可權 (的使用者,系統 管理員 固定伺服器角色) 的成員才能透過 TCP/IP 連線。 沒有此許可權的使用者無法使用 Windows 或 SQL Server 驗證,透過 TCP/IP 通訊協定從遠端連線。

    注意事項

    您會注意到提升許可權的用戶連線只會顯示在 sys.dm_exec_sessions (Transact-SQL) 動態管理檢視 (DMV) 中,但不會出現在 sys.dm_exec_connections (Transact-SQL) 檢視中。

  • 使用命名管道通訊協定的本機和遠端連線,以及使用共用記憶體通訊協定的本機連線,都能繼續正常運作。

此外,下列訊息會記錄在 SQL Server Errorlog 檔案中:

  • 在 SQL Server 啟動:

    錯誤:26023,嚴重性:16,狀態:1。
    伺服器 TCP 提供者無法接聽 ['any'ipv6<> 1963]。 Tcp 埠已在使用中。
    錯誤:9692,嚴重性:16,狀態:1。
    Service Broker 通訊協定傳輸無法接聽埠 1963,因為它正由另一個進程使用。

  • 針對失敗的登入:

    SQL Server 2008 及更新版本:

    錯誤:18456,嚴重性:14,狀態:11。
    使用者 『MyDomain\TestAcc』 的登入失敗。 原因:令牌型伺服器存取驗證失敗,發生基礎結構錯誤。 檢查先前的錯誤。

原因

當您使用 SQL Server 實例設定為使用的相同埠來設定Service Broker 的 TCP 端點時,就會發生此錯誤。 您可以執行下列查詢來取得端點清單:

SELECT * FROM sys.tcp_endpoints

注意事項

如《在線叢書》主題sys.tcp_endpoints (Transact-SQL) 中所述,此檢視不包含 SQL Server 實例目前設定為使用的埠和通訊協定相關信息。 若要尋找該資訊,請參閱 SQL Server 組態管理員

解決方案

  • 方法 1:使用 DROP ENDPOINT (Transact-SQL) 命令,卸除造成問題的端點。

    例如,若要卸除名為 的 TestEP 端點,您可以使用下列命令:

    DROP ENDPOINT TestEP
    
  • 方法 2:使用 ALTER ENDPOINT (Transact-SQL) 命令,將端點變更為使用不同的埠。

    例如,若要將名為 的 TestEP 端點變更為使用不同的埠,您可以使用下列命令:

    ALTER ENDPOINT TestEP as tcp (listener_port=1980)
    

其他相關資訊

其他 TCP 端點也可能會發生類似問題,例如針對資料庫鏡像所建立的端點,而 SQL Server 啟動時的錯誤訊息也會隨之變更。