案例分享-遠端連接SQL Server進行查詢時,發生【訊息10054,在傳送要求至伺服器時發生傳輸層級的錯誤】
問題描述
當您從遠端透過應用程式或是SSMS連接SQL Server時,可能發生下列的錯誤訊息:
訊息10054,層級20,狀態0,行0
在傳送要求至伺服器時發生傳輸層級的錯誤。(provider: TCP 提供者, error: 0 - 遠端主機已強制關閉一個現存的連線。)
經了解之後,該問題發生時所得知的相關資訊如下:
-
在本機以T-SQL查詢時,很快就可以顯示查詢結果,且結果集只有幾十筆資料,但從遠端執行查詢時會發生上述的錯誤。
-
從遠端登入SQL Server,登入所需的時間明顯拉長許多,得等好幾秒才可以登入成功。
-
SQL Server伺服器上的系統資源(CPU、記憶體和網路)使用率都不高初步判斷並無系統忙碌的狀況。
-
只有7~8位開發人員會透過SSMS連接SQL Server,以及近百位使用者會透過AP連接SQL Server,而且這些連線均不會在相同時間連上SQL Server。
-
遠端連線至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的流量資訊,而是在威脅紀錄中可以看到相關連線被移除的訊息。
致謝
感謝好友沙拉麵提供的真實案例,經過一番討論後筆者沒能直接幫上什麼忙,但還是因此學到可能會因為資安設備造成這樣的問題。