
Der neueste Workaround für den mit CVE-2019-1402 eingeführten Fehler 'Query is corrupt'
Der aktuellste Workaround für den Abfrage ist beschädigt Fehler, der mit CVE-2019-1402 in MS Access eingeführt wurde.
Es gibt andere Workarounds, die auf administrativer Ebene angewendet werden müssen, z.B. durch Deinstallation des fehlerhaften Updates. Im Gegensatz dazu ist die Absicht des hier bereitgestellten Workarounds, durch automatische Änderung des MDB/ACCDB-Inhalts selbst mit so wenig Aufwand wie möglich zu funktionieren.
Microsoft hat am 10.12.2019 (Patch-Day) einen Fix für dieses Problem veröffentlicht, der standardmäßig automatisch über WSUS usw. installiert wird. Dieser Workaround sollte daher nach Anwendung des Fixes überflüssig sein, und jeder, der ihn verwendet hat, kann die Funktion RemoveWorkaroundForCorruptedQueryIssue() aufrufen, um den ursprünglichen Anwendungszustand wiederherzustellen.
Stellen Sie sicher, dass entweder der Verweis auf die Microsoft DAO 3.6 Object Library (Abwärtskompatibilität) oder die Microsoft Office x.x Access Database Engine Object Library unter aktiviert ist (siehe für weitere Details).
VBA Editor -> Extras -> VerweiseVerwenden Sie das Modul basWorkaround.bas, um den von Microsoft vorgeschlagenen Workaround (Verwendung einer Abfrage anstelle einer Tabelle) automatisch zu implementieren. Sichern Sie als Vorsichtsmaßnahme zuerst Ihre Datenbank.
Rufen Sie AddWorkaroundForCorruptedQueryIssue() auf, um den Workaround anzuwenden, und RemoveWorkaroundForCorruptedQueryIssue(), um ihn jederzeit zu entfernen.
AddWorkaroundForCorruptedQueryIssue() fügt allen Nicht-Systemtabellen das Suffix _Table hinzu, z.B. würde die Tabelle IceCreams in IceCreams_Table umbenannt.
Es wird auch eine neue Abfrage mit dem ursprünglichen Tabellennamen erstellt, die alle Spalten der umbenannten Tabelle auswählt. In unserem Beispiel würde die Abfrage IceCreams heißen und das SQL select * from [IceCreams_Table] ausführen.
RemoveWorkaroundForCorruptedQueryIssue() führt die umgekehrten Aktionen aus.
Ich verwende diesen Workaround in großen Projekten mit über 400 Tabellen aller Art, einschließlich externer Nicht-MDB-Tabellen (wie SQL Server).
In meinem Fall musste ich USysRibbons_Table manuell zurück in USysRibbons umbenennen, da ich sie beim Erstellen in der Vergangenheit nicht als Systemtabelle markiert hatte.
Beachten Sie die folgenden Punkte:
TableDefs!MyTableName, dass Sie für diese Instanzen in Ihrem Code/UI eine Suchen-und-Ersetzen-Aktion durchführen).