案例分享-遠端連接SQL Server進行查詢時,發生【訊息10054,在傳送要求至伺服器時發生傳輸層級的錯誤】

案例分享-遠端連接SQL Server進行查詢時,發生【訊息10054,在傳送要求至伺服器時發生傳輸層級的錯誤】

問題描述

當您從遠端透過應用程式或是SSMS連接SQL Server時,可能發生下列的錯誤訊息:

訊息10054,層級20,狀態0,行0
在傳送要求至伺服器時發生傳輸層級的錯誤。(provider: TCP 提供者, error: 0 - 遠端主機已強制關閉一個現存的連線。)

經了解之後,該問題發生時所得知的相關資訊如下:

  1. 在本機以T-SQL查詢時,很快就可以顯示查詢結果,且結果集只有幾十筆資料,但從遠端執行查詢時會發生上述的錯誤。
  2. 從遠端登入SQL Server,登入所需的時間明顯拉長許多,得等好幾秒才可以登入成功。
  3. SQL Server伺服器上的系統資源(CPU、記憶體和網路)使用率都不高初步判斷並無系統忙碌的狀況。
  4. 只有7~8位開發人員會透過SSMS連接SQL Server,以及近百位使用者會透過AP連接SQL Server,而且這些連線均不會在相同時間連上SQL Server。
  5. 遠端連線至SQL Server都是以別名方式連接。

問題發生原因

後來發現前一天因為更新入侵偵測系統的威脅pattern,系統誤將SSMS或AP的遠端查詢行為視為DOS攻擊,進而把連線給移除掉,導致前端接收到強制關閉連線的訊息。下列是入侵偵測系統所提供的資訊:

Microsoft SQL Server Named Pipe Denial Of Service Vulnerability
Microsoft SQL Server is prone to a denial-of-service vulnerability while parsing certain crafted TDS requests. An attacker could exploit the vulnerability by sending an unusually large request to a named pipe. A successful attack could cause the SQL Server to be unresponsive.

也因為如此,所以在入侵偵測系統中看不到SSMS或AP連接SQL Server的流量資訊,而是在威脅紀錄中可以看到相關連線被移除的訊息。

致謝

感謝好友沙拉麵提供的真實案例,經過一番討論後筆者沒能直接幫上什麼忙,但還是因此學到可能會因為資安設備造成這樣的問題。

參考資料

- 建立或刪除用戶端使用的伺服器別名 (SQL Server 組態管理員)