使用者可能無法使用 TCP/IP 通訊協定從遠端連線到 SQL Server
本文可協助您解決無法使用 TCP/IP 通訊協定從遠端連線到 SQL Server 的問題。
原始產品版本:SQL Server
原始 KB 編號: 2018930
徵兆
使用 Microsoft SQL Server 時,您可能會看到下列一或多個徵兆:
只有具有 CONTROL SERVER 許可權的使用者(例如 syadmin 固定伺服器角色的成員)能夠透過 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 啟動時的錯誤訊息將會隨之變更。