Umleitungen oder ähnliche Techniken können zu unerwartetem Verhalten mit SQL Server führen
In diesem Artikel wird die Microsoft-Supportrichtlinie beschrieben, wenn Sie Umleitungen von Drittanbietern mit SQL Server verwenden und Probleme auftreten, die auftreten können, wenn Sie sie verwenden.
Ursprüngliche Produktversion: SQL Server
Ursprüngliche KB-Nummer: 920925
Zusammenfassung
Der Microsoft-Support hat zahlreiche Drittanbieterprodukte gefunden, die Umwege verwenden, um zusätzliche Funktionen für SQL Server bereitzustellen. Hierbei handelt es sich in der Regel um Überwachungsfunktionen. Es gibt keinen Zertifizierungsprozess für Umwege von Drittanbietern für Microsoft-Anwendungen. Daher wird in der Regel von Microsoft dringend davon abgeraten, Umwege zu verwenden.
Features, die Umleitungen oder ähnliche Techniken verwenden, um das Verhalten von SQL Server zu ändern, können die folgenden Probleme verursachen:
- Leistungsprobleme.
- Falsche Ergebnisse.
- Datenträger und Arbeitsspeicherbeschädigung.
- Verlust der SQL Server-Antwort.
- Unerwartete Prozessbeendigung.
- Unfähigkeit zur Verwendung der Standarddiagnose, z. B. der fn_get_sql-Funktion und des
DBCC INPUTBUFFER
Befehls. - 100 Prozent CPU-Auslastung und lange Datenbankwiederherstellungszeiten, wenn Sie OLTP-Tabellen im Arbeitsspeicher in SQL Server verwenden.
Bei Verwendung von Nicht-Microsoft-Software wie verknüpften Servern, erweiterten Prozeduren oder COM-Objekten innerhalb des SQL Server-Prozesses können dieselben Probleme auftreten. Umwege werden in der DBA-Ansicht ausgeblendet. Um einen Umweg aufzudecken, müssen Sie die im folgenden Abschnitt "Weitere Informationen" beschriebenen Techniken verwenden. Verknüpfte Server, COM-Objekte und erweiterte Prozeduren verfügen über explizite Registrierungen und definierte Schnittstellen.
Notiz
Aufgrund der verborgenen Natur von Umgängen und dem Mangel an veröffentlichten Schnittstellen bietet Microsoft keine Supportdienste für Features von Drittanbietern, die Umwege oder ähnliche Techniken verwenden. Der Dritte ist für die Unterstützung seines eigenen Codes verantwortlich, ebenso wie er für seinen eigenen verknüpften Server oder eine andere sanktionierte Bereitstellung verantwortlich wäre.
Im üblichen Verlauf der Problembehandlung ist es üblich, dass Microsoft-Supportdienste Sie bitten, nicht wesentliche Aufträge zu deaktivieren und Komponenten von Drittanbietern und andere ähnliche Techniken zu deaktivieren oder zu entfernen. Microsoft versucht immer, den Fußabdruck des Problems zu reduzieren, während es das Problem identifiziert. Nachdem das Problem als nicht im Zusammenhang mit den Aufträgen oder Produkten von Drittanbietern identifiziert wurde, können diese Arbeitsplätze oder Produkte von Drittanbietern wieder in die Produktion eingeführt werden.
Es ist nicht unsere Absicht, einen Umweg aufzudecken und dann die Instanz von SQL Server als nicht unterstützt zu betrachten. Microsoft erkennt an, dass einige Implementierungen erforderlich sind. Microsoft erfordert jedoch, dass Sie die Unterstützung der Umwege überprüfen. Ein Umweg von einem seriösen und vertrauenswürdigen Unternehmen unterscheidet sich definitiv von einem unerwarteten Umweg, der von einem Virus verwendet wird. Microsoft garantiert oder zertifizieren diese Produkte von Drittanbietern weder oder wie die Produkte von Drittanbietern mit Microsoft-Produkten und -Diensten interagieren. Stattdessen sind Drittanbieter für die Identifizierung und Vertrauenswürdigkeit ihrer Produkte und Dienstleistungen verantwortlich. Wenn Sie Fragen zu Produkten und Diensten von Drittanbietern haben, wenden Sie sich bitte an den entsprechenden Drittanbieter. Microsoft ist nicht für Probleme verantwortlich, die durch Ihre Verwendung von Produkten oder Diensten von Drittanbietern in Verbindung mit SQL Server verursacht werden.
Weitere Informationen
Umwege bieten erweiterte Funktionen und einen Risiko-/Belohnungs-Kompromiss. Wenn ein Umweg in SQL Server implementiert wird, wird Drittanbietercode in den Prozessbereich eingefügt. Diese Aktivität kann das Verhalten von SQL Server ändern.
Im Folgenden sind einige Beispielsituationen und mögliche Nebenwirkungen aufgeführt:
Eingehende Netzwerkdatenverkehrpakete (TDS) werden gescannt und geändert. Der Umweg wird an einem kritischen Ort am net_readdata Netzwerkprozessthread hinzugefügt. Selbst 100 CPU-Zyklen an diesem Standort können den Batchratendurchsatz erheblich reduzieren.
Eine Änderung der tatsächlichen TDS-Daten kann zu Speicherkritzeln führen. Dieses Problem hat verschiedene SQL Server-Stabilitätsprobleme und datenbeschädigungen ausgelöst. Probleme können dazu führen, dass ein TDS-Paket teilweise geändert wird und garbage auf SQL Server wiedergegeben wird. Protokollierungseinrichtungen auf dieser Ebene können Kennwörter und andere vertrauliche Daten verfügbar machen, die die SQL Server-Ablaufverfolgung unterdrücken und schützen soll.
SQL Server-Analyseroutinen werden umgeleitet, um das Verhalten zu ändern. Folgende Nebenwirkungen sind möglich:
- Ausführungspläne stimmen nicht mit dem tatsächlichen Abfragetext überein.
- Ein Befehl wird nur einmal vom Client gesendet. Der Befehl wird jedoch mehrmals ausgeführt.
- Die Ablaufverfolgungsausgabe zeigt den ursprünglichen Befehl anstelle der geänderten Abfrage an.
- Der
DBCC INPUTBUFFER
Befehl zeigt den ursprünglichen Befehl anstelle der geänderten Abfrage an. - Die
fn_get_sql
Funktion zeigt falsche Daten an. Darüber hinaus ist diefn_get_sql
Funktion anfällig für Ausnahmen und falsche Ergebnisse. Diefn_get_sql
Funktion wird von vielen Überwachungslösungen verwendet und kann Probleme mit den Überwachungslösungen verursachen. - Die Planung des Gesamten Benutzermodusplaners (USER Mode Scheduler, UMS) und SQL Server Operating System (SQLOS) kann unterbrochen werden. Dies führt zu Einem Verlust der SQL Server-Antwort, zu Leistungsänderungen und zu Ausfällen.
Win32-APIs, die erweiterte Sicherheitsfeatures bereitstellen, werden umgeleitet. Je nach Implementierung können Protokollierungseinrichtungen auf dieser Ebene Kennwörter und andere vertrauliche Daten verfügbar machen. Die gesamte UMS- und SQLOS-Planung wird unterbrochen. Dies führt zu Einem Verlust der SQL Server-Antwort und zu Ausfällen.
Das Ändern von Funktionstabellen und das Umleiten von kernen SQL Server-Funktionen oder Windows-APIs werden im SQL Server-Prozess nicht unterstützt. Dies kann zu Instabilität und unerwartetem Verhalten in der SQL Server-Funktionalität führen.
Das folgende Beispiel zeigt, dass die kernel32!GetQueuedCompletionStatus
Funktion umgeleitet wurde.
MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait
In der Assembly für die GetQueuedCompletionStatus
Funktion wurde die erste Anweisung durch eine Sprunganweisung ersetzt.
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
Die Assembly für den eingefügten Code zeigt die umgeleitete Aktivität und einen Aufruf der MyDLL-Datei an.
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]
Mithilfe der Debuggingtools für Windows können Sie ermitteln, ob Umwege verwendet werden. Gehen Sie hierzu wie folgt vor.
Notiz
Testen Sie diese Methode immer, bevor Sie sie in der Produktion ausprobieren. Wenn Sie Debugtools für Windows verwenden, kann der Prozess beim Ausführen der Befehle fixiert werden. Dieses Verhalten kann sich negativ auf einen Produktionsserver auswirken.
Fügen Sie Debugtools für Windows an SQL Server an, oder laden Sie eine vollständige Benutzerabbilddatei.
Führen Sie den folgenden Debuggerbefehl aus. Mit diesem Befehl wird jedes Image anhand des Datenträgerimages überprüft, um festzustellen, ob Umwege eingefügt wurden.
!for_each_module "!chkimg -v @#Base -d"
Trennen Sie den Debugger.
Wenn das Speicherbild geändert wurde, kann die Ausgabe wie folgt aussehen:
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)
Sie können die Assembly überprüfen, um das Problem wie folgt genauer zu betrachten:
0:038> u ssnetlib!ConnectionClose
ssnetlib!ConnectionClose]:
0c263710 6800000000 push 0
0c263715 e9278ada03 jmp MyDLL!MyGetQueuedCompletionStatus <- A detour has been installed.
Antivirenprogramme, die SQL-Einfügungsangriffe verfolgen, können SQL Server-Code umleiten. In diesem Szenario kann die Ausgabe der !for_each_module "!chkimg -v @#Base -d"
Erweiterung zeigen, dass die SQL Server-Funktionen und ex_raise2
yyparse
geändert werden:
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
Es wird empfohlen, sich mit dem Anbieter der Umleitungen oder ähnlichen Techniken in Verbindung zu setzen, um detaillierte Informationen darüber zu erhalten, wie die Umwege in SQL Server verwendet werden. Weitere Informationen zu Umwegen und ähnlichen Techniken finden Sie unter Detours.