Deviazioni o tecniche simili possono causare comportamenti imprevisti con SQL Server

Questo articolo descrive i criteri di supporto Microsoft quando si usano deviazioni di terze parti con SQL Server e problemi che possono verificarsi quando vengono usati.

Versione originale del prodotto: SQL Server
Numero KB originale: 920925

Riepilogo

Il supporto tecnico Microsoft ha riscontrato numerosi prodotti di terze parti che usano deviazioni per fornire funzionalità aggiuntive per SQL Server. Si tratta in genere di funzionalità di controllo. Non è previsto alcun processo di certificazione per le deviazioni di terze parti per le applicazioni Microsoft. Pertanto, in genere, Microsoft scoraggia fortemente l'uso delle deviazioni.

Le funzionalità che usano deviazioni o tecniche simili per modificare il comportamento di SQL Server possono causare i problemi seguenti:

  • Problemi di prestazioni.
  • Risultati non corretti.
  • Danneggiamento del disco e della memoria.
  • Perdita di SQL Server risposta.
  • Terminazione del processo imprevista.
  • Impossibilità di usare la diagnostica standard, ad esempio la funzione fn_get_sql e il DBCC INPUTBUFFER comando .
  • Utilizzo della CPU al 100% e tempi di ripristino lunghi del database quando si usano tabelle OLTP in memoria in SQL Server.

È possibile che si verifichino questi stessi problemi quando si usa software non Microsoft, ad esempio server collegati, procedure estese o oggetti COM all'interno del processo di SQL Server. Le deviazioni sono nascoste dalla visualizzazione DBA. Per individuare una deviazione, è necessario usare le tecniche descritte nella sezione Altre informazioni riportata di seguito. I server collegati, gli oggetti COM e le procedure estese hanno una registrazione esplicita e interfacce definite.

Nota

A causa della natura nascosta delle deviazioni e della mancanza di interfacce pubblicate, Microsoft non fornisce servizi di supporto per funzionalità di terze parti che usano deviazioni o tecniche simili. La terza parte è responsabile del supporto del proprio codice, così come sarebbe responsabile del proprio server collegato o di altre distribuzioni approvate.

È prassi comune, nel corso consueto della risoluzione dei problemi, che i servizi di supporto Microsoft chiedano di disabilitare i processi non essenziali e di disabilitare o rimuovere componenti di terze parti e altre tecniche simili. Microsoft cerca sempre di ridurre il footprint del problema mentre identifica il problema. Dopo che il problema è stato identificato come non correlato ai processi o ai prodotti di terze parti, tali processi o prodotti di terze parti possono essere reintrodotti nella produzione.

Non è nostra intenzione scoprire una deviazione e quindi considerare l'istanza di SQL Server non supportata. Microsoft riconosce che alcune implementazioni sono necessarie. Tuttavia, Microsoft richiede di convalidare la supportabilità delle deviazioni. Una deviazione da una società affidabile e attendibile è sicuramente diversa da una deviazione imprevista che viene utilizzata da un virus. Microsoft non garantisce o certifica questi prodotti di terze parti o il modo in cui i prodotti di terze parti interagiscono con i prodotti e i servizi Microsoft. I fornitori di terze parti sono invece responsabili dell'identificazione e dell'affidabilità dei loro prodotti e servizi. In caso di domande su prodotti e servizi di terze parti, contattare la terza parte applicabile. Microsoft non è responsabile di eventuali problemi causati dall'uso di prodotti o servizi di terze parti in relazione a SQL Server.

Ulteriori informazioni

Le deviazioni offrono funzionalità migliorate e un compromesso tra rischio e ricompensa. In genere, quando viene implementata una deviazione in SQL Server, il codice di terze parti viene inserito nello spazio del processo. Questa attività può modificare il comportamento di SQL Server.

Di seguito sono riportate alcune situazioni di esempio e possibili effetti collaterali:

  • I pacchetti TDS (Incoming Network Traffic) vengono analizzati e modificati. La deviazione viene aggiunta in una posizione critica nel thread del processo di rete net_readdata. Anche 100 cicli CPU in questa posizione possono ridurre significativamente la velocità effettiva della velocità batch.

    Una modifica dei dati TDS effettivi può causare scarabocchi di memoria. Questo problema ha provocato vari problemi di stabilità SQL Server e di danneggiamento dei dati. I problemi possono causare la modifica parziale di un pacchetto TDS e la riproduzione del garbage to SQL Server. Le funzionalità di registrazione a questo livello possono esporre password e altri dati sensibili che SQL Server traccia sono progettati per eliminare e proteggere.

  • SQL Server routine di analisi vengono deviazioni per modificare il comportamento. Di seguito sono riportati i possibili effetti collaterali:

    • I piani di esecuzione non corrispondono al testo effettivo della query.
    • Un comando viene inviato solo una volta dal client. Tuttavia, il comando viene eseguito più volte.
    • L'output di traccia mostra il comando originale anziché la query modificata.
    • Il DBCC INPUTBUFFER comando mostra il comando originale anziché la query modificata.
    • La fn_get_sql funzione mostra dati non corretti. Inoltre, la fn_get_sql funzione è soggetta ad eccezioni e a risultati non corretti. La fn_get_sql funzione viene usata da molte soluzioni di monitoraggio e può causare problemi nelle soluzioni di monitoraggio.
    • La pianificazione complessiva dell'utilità di pianificazione in modalità utente (UMS) e del sistema operativo SQL Server (SQLOS) potrebbe essere interrotta. Ciò comporta la perdita di SQL Server risposta, le modifiche delle prestazioni e le interruzioni.
  • Le API Win32 che forniscono funzionalità di sicurezza avanzate vengono deviazioni. A seconda dell'implementazione, le funzionalità di registrazione a questo livello potrebbero esporre password e altri dati sensibili. La pianificazione complessiva di UMS e SQLOS viene interrotta. Ciò comporta la perdita di SQL Server risposta e interruzioni.

  • La modifica delle tabelle delle funzioni e il reindirizzamento delle funzioni di base SQL Server o delle API di Windows non sono supportati all'interno del processo di SQL Server. Ciò può causare instabilità e comportamento imprevisto nella funzionalità di SQL Server.

L'esempio seguente mostra che la kernel32!GetQueuedCompletionStatus funzione è stata deviazione.

MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait

Nell'assembly per la GetQueuedCompletionStatus funzione la prima istruzione è stata sostituita con un'istruzione jump.

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

L'assembly per il codice inserito mostra l'attività deviazione e una chiamata al file 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]

È possibile usare strumenti di debug per Windows per determinare se vengono usate deviazioni. A tale scopo, attenersi alla seguente procedura.

Nota

Testare sempre questo metodo prima di provarlo nell'ambiente di produzione. Quando si usano strumenti di debug per Windows, il processo potrebbe bloccarsi quando si eseguono i comandi. Questo comportamento può influire negativamente su un server di produzione.

  1. Collegare strumenti di debug per Windows a SQL Server o caricare un file dump utente completo.

  2. Eseguire il comando del debugger seguente. Questo comando controlla ogni immagine rispetto all'immagine su disco per determinare se sono state inserite deviazioni.

    !for_each_module "!chkimg -v @#Base -d"
    
  3. Scollegare il debugger.

Se l'immagine in memoria è stata modificata, l'output potrebbe essere simile al seguente:

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)

È possibile esaminare l'assembly per esaminare più attentamente il problema come indicato di seguito:

0:038> u ssnetlib!ConnectionClose
ssnetlib!ConnectionClose]:
0c263710 6800000000 push 0
0c263715 e9278ada03 jmp MyDLL!MyGetQueuedCompletionStatus <- A detour has been installed.

I programmi antivirus che tengono traccia degli attacchi sql injection possono deviazione SQL Server codice. In questo scenario, l'output dell'estensione !for_each_module "!chkimg -v @#Base -d" può indicare che le funzioni yyparse SQL Server e ex_raise2 vengono modificate:

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

È consigliabile contattare il provider delle deviazioni o tecniche simili per informazioni dettagliate sull'utilizzo delle deviazioni in SQL Server. Per altre informazioni sulle deviazioni e tecniche simili, vedere Deviazioni.