Utilizzare funzioni detours o tecniche simili per modificare il comportamento di Microsoft SQL Server possono causare i seguenti problemi:
- Problemi di prestazioni
- Risultati non corretti
- Danneggiamento del disco e memoria
- Perdita della risposta di SQL Server
- Terminazione imprevista del processo
- Impossibilità di utilizzare la diagnostica standard, ad esempio la funzione fn_get_sql e il comando DBCC INPUTBUFFER
- Maggiore rischio di problemi di protezione
Nota. Microsoft non fornisce servizi di supporto per le funzionalità di terze parti che utilizzano detours o tecniche simili per modificare il comportamento di SQL Server. Se si lavora con i servizi di supporto di SQL Server su un problema di SQL Server e viene identificata che possano essere coinvolti detours o tecniche simili che consentono di modificare il comportamento di SQL Server, il personale del supporto tecnico verrà chiesto di disattivare o rimuovere tali detours o funzionalità simili come risoluzione dei problemi. Prima di eseguire ulteriore risoluzione dei problemi, il problema segnalato deve essere riprodotti senza alcuna funzionalità di detour presente. Il problema non dovrebbe più verificarsi, Microsoft consiglia di contattare il fornitore per la funzionalità di terze parti e continuare la risoluzione dei problemi con direzione da tale fornitore.
Detours sono efficaci. Detours forniscono funzionalità avanzate e un compromesso rischio/ricompensa. In genere, quando viene implementato un detour in SQL Server, il codice appropriato viene inserito nello spazio di processo. Funzioni o metodi di SQL Server vengono intercettate. Questa attività può modificare il comportamento di base delle prestazioni di SQL Server.
Di seguito sono alcune situazioni di esempio e possibili effetti collaterali:
- I pacchetti di traffico (TDS) di rete in ingresso vengono analizzati e modificati. Il detour viene aggiunto a un'ubicazione critica per il thread del processo di rete net_readdata. Anche alcuni 100 cicli di CPU in questa posizione possono ridurre significativamente velocità effettiva del tasso di batch.
Scribblers di memoria può comportare un cambiamento nei dati TDS effettivi. Questo problema è generato vari problemi di stabilità di SQL Server e danneggiamento dei dati. Problemi possono causare un pacchetto TDS parzialmente da modificare e riprodurre il Garbage Collector per SQL Server. Meccanismi a questo livello di registrazione possono esporre le password e altri dati sensibili che SQL Server analisi sono stato progettato per sopprimere e assicura la protezione. - Routine di analisi di SQL Server sono detoured per modificare il comportamento. Di seguito sono possibili effetti collaterali:
- I piani di esecuzione sono uguali testo query effettiva.
- Un comando viene inviato solo una volta dal client. Tuttavia, il comando viene eseguito più volte.
- Output di analisi viene visualizzato il comando originale anziché la query modificata.
- Il comando DBCC INPUTBUFFER Mostra il comando originale anziché la query modificata.
- La funzione fn_get_sql Mostra dati non corretti. Inoltre, la funzione fn_get_sql è soggetta alle eccezioni e risultati non corretti. La funzione fn_get_sql viene utilizzata da molte soluzioni di monitoraggio e potrebbe causare problemi in soluzioni di monitoraggio.
- In generale dell'utilità di pianificazione di modalità utente (UMS) e la pianificazione del sistema operativo di SQL Server (SQLOS) può essere interrotta. Questo porta alla perdita della risposta di SQL Server, per le modifiche delle prestazioni e di interruzioni del servizio.
- Le API Win32 che forniscono funzionalità di protezione avanzate sono detoured. A seconda dell'implementazione, funzionalità di registrazione a questo livello potrebbe esporre le password e altri dati sensibili. Nel complesso UMS e SQLOS la programmazione viene interrotta. Questo porta alla perdita della risposta di SQL Server e di interruzioni del servizio.
Nell'esempio riportato di seguito viene illustrato che la funzione kernel32
!GetQueuedCompletionStatus funzione è stata detoured.
MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait
In assembly per la funzione
GetQueuedCompletionStatus , la prima istruzione è stata sostituita con un'istruzione di salto.
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 viene mostrato l'impegno di tipo 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 utilizzare gli strumenti di debug per Windows per determinare se sono in uso detours. Per effettuare questa operazione, attenersi alla seguente procedura.
Nota. Verificare sempre il metodo prima di provare in fase di produzione. Quando si utilizzano gli strumenti di debug per Windows, il processo potrebbe bloccarsi quando si eseguono i comandi. Questo comportamento potrebbe influire negativamente su un server di produzione.
- Allegare Debugging Tools for Windows per SQL Server o caricare un file di dettagli utente completa.
- Il seguente comando debugger. Questo comando Controlla se ogni immagine con l'immagine su disco per determinare se è stato inserito detours.
!for_each_module "!chkimg -v @#Base -d"
- Disconnessione del debugger.
Per ottenere gli strumenti di debug per Windows, visitare il seguente sito Web Microsoft:
Se è stato modificato l'immagine in memoria, 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 illustrato di seguito:
0:038> u ssnetlib!ConnectionClose
ssnetlib!ConnectionClose]:
0c263710 6800000000 push 0
0c263715 e9278ada03 jmp MyDLL!MyGetQueuedCompletionStatus <- A detour has been installed.
Si consiglia di contattare il provider del detours o delle tecniche simili per informazioni su come utilizzare il detours o tecniche simili in SQL Server. Per ulteriori informazioni su detours e tecniche simili, visitare il seguente sito Web di Microsoft Research Center:
Identificativo articolo: 920925 - Ultima modifica: giovedì 10 gennaio 2013 - Revisione: 1.0
Le informazioni in questo articolo si applicano a:
- 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 KbMtit |
Traduzione automatica articoliIl presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo:
920925
(http://support.microsoft.com/kb/920925/en-us/
)
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.