在 SQL Server 中不支援協力廠商課程或類似的技術的使用

文章翻譯 文章翻譯
文章編號: 920925 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

使用課程或類似的技術來變更行為的 Microsoft SQL Server 的功能可能會造成下列問題:
  • 效能問題
  • 不正確的結果
  • 磁碟和記憶體損毀
  • SQL Server 回應的遺失。
  • 未預期的處理程序終止
  • 無法使用標準的診斷,例如fn_get_sql函式和 DBCC INPUTBUFFER 命令
  • 安全性問題的可能性就愈高
附註Microsoft 不提供使用課程或類似的技術變更的 SQL Server 行為的協力廠商功能的支援服務。如果您正在使用 SQL Server 支援服務上有 SQL Server 的問題,且其所識別的課程或類似的技術變更的 SQL Server 行為可能涉及,支援專業人員會要求您停用或移除此類課程或類似的功能,做為疑難排解步驟。其他疑難排解可能發生之前,必須重現報告的問題不存在任何 detour 功能。應該不會再出現問題,Microsoft 可能會建議您連絡廠商以取得協力廠商功能,並繼續疑難排解該廠商所提供的方向。

其他相關資訊

課程功能相當強大。課程提供增強的功能和風險/報酬取捨。一般而言,detour 在 SQL Server 中實作時,適用的程式碼插入處理序空間。SQL Server 方法或函式被攔截。這項活動可能會變更 SQL Server 的基本效能行為。

以下是一些範例情況和可能的副作用:
  • 連入網路流量 (TDS) 封包會掃描,並變更。Detour 會加入在 net_readdata 網路處理序執行緒的重要位置。即使某些 100 的 CPU 循環,在這個位置可能會大幅降低批次速率輸送量。

    在實際的 TDS 資料變更可能會導致記憶體 scribblers。這個問題已經觸發各種 SQL Server 穩定性的問題和資料損毀。問題可能會造成部份變更,並重新執行到 SQL Server 的記憶體回收的 TDS 封包。記錄的此層級的輔助功能可能會公開密碼和其他機密資料追蹤設計來隱藏,並協助保護該 SQL Server。
  • SQL Server 的剖析常式會 detoured 若要變更行為。下列是可能的副作用:
    • 執行計劃與實際的查詢文字不相符。
    • 從用戶端一次送出命令。然而,命令會執行多次。
    • 追蹤輸出會顯示 [原始] 命令而非已變更的查詢。
    • DBCC INPUTBUFFER 命令會顯示 [原始] 命令而非已變更的查詢。
    • Fn_get_sql函數顯示不正確的資料。此外, fn_get_sql函式受到例外狀況,並不正確的結果。Fn_get_sql函式由許多的監視解決方案,並監視解決方案上可能會造成問題。
    • 整體來說可能會中斷使用者模式排程器 (UMS) 和 SQL Server 作業系統 (SQLOS) 排程。這會導致喪失 SQL Server 回應、 效能的變更,以及中斷。
  • Win32 Api 提供增強的安全性功能被 detoured。根據實作,此層級的記錄功能可能會暴露密碼及其他機密的資料。整體 UMS 和排程的 SQLOS 就會中斷。這會導致喪失 SQL Server 回應,並中斷。
  • SQL Server 處理序中不支援修改函式的資料表和重新導向核心 SQL Server 函式或 Windows API。這可能會導致不穩定和非預期的行為在 SQL Server 的功能。
下列範例會示範, kernel32!GetQueuedCompletionStatus已經 detoured 函式。
MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait
GetQueuedCompletionStatus函式的組件,第一個指令已被取代跳躍指令。
0:038> u kernel32!GetQueuedCompletionStatus
kernel32!GetQueuedCompletionStatus 
77e660f1 e90a9f00aa      jmp     21e70000   ?  This points to an address that does not appear in the loaded module list (lm). It is injected code.
77e660f6 83ec10          sub     esp,10h
插入的程式碼的組件會顯示 detoured 的活動和 MyDLL 檔案的呼叫。
0:038> u 21e70000  

21e70000 55              push    ebp
21e70001 8bec            mov     ebp,esp
21e70003 51              push    ecx
21e70004 8b4518          mov     eax,dword ptr [ebp+18h]
21e70007 50              push    eax
21e70008 8b4d14          mov     ecx,dword ptr [ebp+14h]
21e7000b 51              push    ecx
21e7000c 8b5510          mov     edx,dword ptr [ebp+10h]
21e7000f 52              push    edx
21e70010 8b450c          mov     eax,dword ptr [ebp+0Ch]
21e70013 50              push    eax
21e70014 8b4d08          mov     ecx,dword ptr [ebp+8]
21e70017 51              push    ecx
21e70018 e8234d19ee      call   MyDLL+0x4d40 (10004d40)   <- Call to the MyDLL file.
21e7001d 8945fc          mov     dword ptr [ebp-4],eax
21e70020 8b55fc          mov     edx,dword ptr [ebp-4]

若要判斷是否使用課程中,您可以使用偵錯工具的視窗。若要這麼做,請依照下列步驟執行。

附註嘗試在實際執行環境之前,請務必測試這個方法。當您使用偵錯工具的視窗時,當您執行命令時,可能會凍結程序。這種行為可能會影響實際執行伺服器。
  1. 將針對 Windows 偵錯工具附加至 SQL Server 或載入完整的使用者傾印檔案。
  2. 請輸入以下的偵錯工具命令。這個命令會檢查針對磁碟上的映像,以判斷是否已插入課程的每個影像。
    !for_each_module "!chkimg -v @#Base -d"
  3. 中斷偵錯工具的連結。
若要取得偵錯工具的視窗,請造訪下列 Microsoft 網站:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
如果記憶體中影像已遭更改,輸出可能如下所示:
Comparison image path: c:\program files\microsoft sql server\mssql\binn\ssnetlib.dll\ssnetlib.dll
Scanning section:    .text
Size: 56488
Range to scan: 0c261000-0c26eca8
0c263710-0c26371a  11 bytes - ssnetlib!ConnectionClose
           
	[ 8b ff 55 8b ec 83 ec 10:68 00 00 00 00 e9 27 8a ]
0c2641e0-0c2641ea  11 bytes - ssnetlib!ConnectionReadAsync (+0xad0)

	[ 8b ff 55 8b ec 83 ec 38:68 00 00 00 00 e9 00 7e ]
0c265160-0c26516a  11 bytes - ssnetlib!ConnectionWriteAsync (+0xf80)

	[ 8b ff 55 8b ec 83 ec 28:68 00 00 00 00 e9 ba 70 ]
Total bytes compared: 56488(100%)
Number of errors: 33
33 errors : 0c260000 (0c263710-0c26516a)
您可以檢閱要仔細研究這個問題,如下所示的組件:
0:038> u ssnetlib!ConnectionClose
ssnetlib!ConnectionClose]:
0c263710 6800000000      push    0
0c263715 e9278ada03      jmp     MyDLL!MyGetQueuedCompletionStatus  <- A detour has been installed.

追蹤 SQL 資料隱碼攻擊的防毒程式可以 detour SQL Server 程式碼。在這個案例中,輸出! for_each_module"! chkimg-v @# Base-d"副檔名可能會顯示 SQL Server 函式 yyparse 和 ex_raise2 會被修改:

Comparison image path: <symbol file path>\sqlservr.exeRange to scan: c81000-3de7d48??? ed71a8-ed71ad? 6 bytes - sqlservr!yyparse?[ ff f5 41 54 41 55:e9 c7 95 5c 76 90 ]1202820-1202824  5 bytes - sqlservr!ex_raise2 (+0x32b678)?[ ff f3 57 41 54:e9 20 e0 29 76 ]Total bytes compared: 51801416(17%)Number of errors: 11

我們建議您連絡提供者的課程或類似的技術,如需有關如何在 SQL Server 中使用的課程或類似的技術資訊。如需有關課程和類似的技術的詳細資訊,請造訪下列 Microsoft 參考資料中心 」 網站:
http://research.microsoft.com/sn/detours

屬性

文章編號: 920925 - 上次校閱: 2013年12月10日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Express Edition with Advanced Services
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Express
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 R2 Web
  • Microsoft SQL Server 2008 R2 Workgroup
  • Microsoft SQL Server 2008 Web
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Express
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
  • SQL Server 2012 Enterprise Core
關鍵字:?
kbtshoot kbexpertiseadvanced kbinfo kbmt KB920925 KbMtzh
機器翻譯
請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。
按一下這裡查看此文章的英文版本:920925
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com