Umleitungen oder ähnliche Techniken können zu unerwartetem Verhalten bei SQL Server

In diesem Artikel wird die Microsoft-Supportrichtlinie beschrieben, wenn Sie Umwege von Drittanbietern mit SQL Server und Problemen verwenden, die bei deren Verwendung auftreten können.

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 rät Microsoft im Allgemeinen dringend davon ab, 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, Standard-Diagnose zu verwenden, z. B. die fn_get_sql-Funktion und den DBCC INPUTBUFFER Befehl.
  • 100 Prozent CPU-Auslastung und lange Datenbankwiederherstellungszeiten, wenn Sie IN-Memory-OLTP-Tabellen in SQL Server verwenden.

Diese Probleme können auftreten, wenn Sie nicht von Microsoft stammende Software wie Verbindungsserver, erweiterte Prozeduren oder COM-Objekte innerhalb des SQL Server-Prozesses verwenden. Umwege sind in der DBA-Ansicht ausgeblendet. Um einen Umweg zu entdecken, müssen Sie die Techniken verwenden, die im folgenden Abschnitt Weitere Informationen beschrieben werden. Verbindungsserver, COM-Objekte und erweiterte Prozeduren verfügen über eine explizite Registrierung und definierte Schnittstellen.

Hinweis

Aufgrund der verborgenen Natur von Umwegen und des Mangels an veröffentlichten Schnittstellen bietet Microsoft keine Supportdienste für Features von Drittanbietern an, die Umwege oder ähnliche Techniken verwenden. Der Drittanbieter ist für die Unterstützung seines eigenen Codes verantwortlich, genau wie er für seinen eigenen Verbindungsserver oder eine andere sanktionierte Bereitstellung verantwortlich wäre.

Es ist üblich, dass Microsoft-Supportdienste sie im üblichen Verlauf der Problembehandlung auffordern, nicht wesentliche Aufträge zu deaktivieren und Komponenten von Drittanbietern und andere ähnliche Techniken zu deaktivieren oder zu entfernen. Microsoft versucht immer, den Speicherbedarf des Problems zu reduzieren, während das Problem identifiziert wird. Nachdem festgestellt wurde, dass das Problem nicht mit den Arbeitsplätzen oder Produkten von Drittanbietern zusammenhängt, können diese Aufträge oder Produkte von Drittanbietern wieder in die Produktion aufgenommen werden.

Es ist nicht unsere Absicht, einen Umweg aufzudecken und dann die instance der SQL Server als nicht unterstützt zu betrachten. Microsoft erkennt an, dass einige Implementierungen erforderlich sind. Microsoft verlangt jedoch, dass Sie die Unterstützbarkeit der Umleitungen überprüfen. Ein Umweg von einem seriösen und vertrauenswürdigen Unternehmen unterscheidet sich definitiv von einem unerwarteten Umweg, der von einem Virus benutzt wird. Microsoft garantiert oder zertifiziert diese Produkte von Drittanbietern nicht 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 verantwortlich für Probleme, die durch Die Nutzung von Produkten oder Diensten von Drittanbietern im Zusammenhang 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 in der Regel Code von Drittanbietern 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:

  • TDS-Pakete (Eingehender Netzwerkdatenverkehr) werden gescannt und geändert. Der Umweg wird an einer kritischen Stelle am net_readdata Netzwerkprozessthreads hinzugefügt. Selbst 100 CPU-Zyklen an diesem Standort können den Batchratendurchsatz erheblich reduzieren.

    Eine Änderung der tatsächlichen TDS-Daten kann zu Arbeitsspeicher-Scribblern 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 Müll an SQL Server wiedergegeben wird. Protokollierungsfunktionen auf dieser Ebene können Kennwörter und andere vertrauliche Daten verfügbar machen, die SQL Server Ablaufverfolgung unterdrückt und geschützt werden soll.

  • SQL Server Analyseroutinen werden umgeleitet, um das Verhalten zu ändern. Im Folgenden sind mögliche Nebenwirkungen aufgeführt:

    • Ausführungspläne stimmen nicht mit dem tatsächlichen Abfragetext überein.
    • Ein Befehl wird nur einmal vom Client übermittelt. 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 die fn_get_sql Funktion anfällig für Ausnahmen und falsche Ergebnisse. Die fn_get_sql Funktion wird von vielen Überwachungslösungen verwendet und kann Probleme bei den Überwachungslösungen verursachen.
    • Die Planung des Gesamtzeitplans für den Benutzermodus (User Mode Scheduler, UMS) und SQL Server Operating System (SQLOS) kann unterbrochen werden. Dies führt zu einem Verlust von SQL Server Reaktion, zu Leistungsänderungen und zu Ausfällen.
  • Win32-APIs, die erweiterte Sicherheitsfeatures bereitstellen, werden umgeleitet. Abhängig von der Implementierung können Protokollierungsfunktionen 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 SQL Server Reaktion und zu Ausfällen.

  • Das Ändern von Funktionstabellen und das Umleiten von kernigen SQL Server Funktionen oder Windows-APIs werden innerhalb des SQL Server-Prozesses 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 Umleitungsaktivitä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]

Sie können die Debugtools für Windows verwenden, um zu bestimmen, ob Umwege verwendet werden. Gehen Sie hierzu wie folgt vor.

Hinweis

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 einfrieren. Dieses Verhalten kann sich negativ auf einen Produktionsserver auswirken.

  1. Fügen Sie Debugtools für Windows an SQL Server an, oder laden Sie eine vollständige Benutzerabbilddatei.

  2. Führen Sie den folgenden Debuggerbefehl aus. Dieser Befehl überprüft jedes Image anhand des Image auf dem Datenträger, um zu ermitteln, ob Umwege eingefügt wurden.

    !for_each_module "!chkimg -v @#Base -d"
    
  3. Trennen Sie den Debugger.

Wenn das In-Memory-Image 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 wie folgt überprüfen, um das Problem genauer zu untersuchen:

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

Antivirenprogramme, die Angriffe mit Einschleusung von SQL nachverfolgen, 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 funktioniert yyparse und ex_raise2 geändert wird:

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

Wir empfehlen Ihnen, sich mit dem Anbieter der Umleitungen oder ähnlichen Techniken in Verbindung zu setzen, um detaillierte Informationen darüber zu erfahren, wie er die Umwege in SQL Server nutzt. Weitere Informationen zu Umwegen und ähnlichen Verfahren finden Sie unter Umleitungen.