Condividi tramite


Le 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 a SQL Server. Queste sono in genere funzionalità di controllo. Non è previsto alcun processo di certificazione per le deviazioni di terze parti per le applicazioni Microsoft. Pertanto, in genere, Microsoft sconsiglia vivamente l'uso di 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 risposta di SQL Server.
  • Chiusura imprevista del processo.
  • 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.

Questi stessi problemi possono verificarsi 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 dispongono di interfacce di registrazione esplicite e definite.

Note

A causa della natura nascosta delle deviazioni e della mancanza di interfacce pubblicate, Microsoft non fornisce servizi di supporto per le funzionalità di terze parti che usano deviazioni o tecniche simili. La terza parte è responsabile del supporto del proprio codice, proprio come sarebbe responsabile del proprio server collegato o di un'altra distribuzione approvata.

È pratica comune, nel corso consueto della risoluzione dei problemi, affinché i servizi di supporto Microsoft richiedano di disabilitare processi non essenziali e di disabilitare o rimuovere componenti di terze parti e altre tecniche simili. Microsoft tenta sempre di ridurre il footprint del problema durante l'identificazione del problema. Dopo che il problema è identificato come non correlato ai processi o ai prodotti di terze parti, tali processi o prodotti di terze parti possono essere reintrodotti nell'ambiente di produzione.

Non è l'intenzione di individuare 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 prodotti e servizi Microsoft. I fornitori di terze parti sono invece responsabili dell'identificazione e dell'attendibilità dei propri 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à avanzate e un compromesso di rischio/ricompensa. In genere, quando viene implementata una deviazione in SQL Server, il codice di terze parti viene inserito nello spazio di elaborazione. Questa attività può modificare il comportamento di SQL Server.

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

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

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

  • Le routine di analisi di SQL Server 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 una sola 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 a 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 della modalità utente (UMS) e della pianificazione del sistema operativo SQL Server (SQLOS) potrebbe essere interrotta. Ciò comporta la perdita di risposta di SQL Server, le modifiche alle prestazioni e le interruzioni.
  • Le API Win32 che forniscono funzionalità di sicurezza avanzate sono 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 risposta di SQL Server e di interruzioni.

  • La modifica delle tabelle delle funzioni e il reindirizzamento delle funzioni principali di SQL Server o dell'API di Windows non sono supportate 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 deviata.

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à detoured 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 gli strumenti di debug per Windows per determinare se vengono utilizzate le deviazioni. A tale scopo, eseguire la procedura seguente.

Note

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

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

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

    !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 annullare il codice di SQL Server. In questo scenario, l'output dell'estensione !for_each_module "!chkimg -v @#Base -d" può indicare che le funzioni yyparse di 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 su come vengono usate le deviazioni in SQL Server. Per altre informazioni sulle deviazioni e tecniche simili, vedere Deviazioni.