wxSQLite3 Logo

wxSQLite3

wxSQLite3 ist eine C++ Klasse für die Verwendung der frei verfügbaren SQLite 3.x Datenbank in wxWidgets-Anwendungen.

license

Aktuelle wxSQLite3 Version ist die aktuelle Version. Die API-Dokumentation kann online eingesehen werden. Die Komponente selbst ist in GitHub verfügbar:

wxSQLite3 - SQLite3 database wrapper for wxWidgets (including SQLite3 encryption extension)

C 638 187

Verwechslungsgefahr
Neben wxSQLite3 existiert auch eine Komponente mit nahezu gleichem Namen: wxSQLite. Allerdings unterstützt wxSQLite nur die ältere Version SQLite 2.x und wird seit über 20 Jahren nicht mehr aktualisiert.

Beschreibung

Für den Zugriff auf SQLite-Datenbanken existieren bereits viele unterschiedliche Lösungen. Die Entwicklung der Komponente wxSQLite3 wurde zu Beginn vor allem von folgenden SQLite-Schnittstellen beeinflusst:

  • wxSQLite : Hierbei handelt es sich um eine wxWidgets-Klasse für die SQLite-Version 2.x. Die SQLite-Version 3.x verfügt über eine Vielzahl zusätzlicher Eigenschaften, die von dieser Klasse nicht unterstützt werden.
  • CppSQLite : Diese Klasse ist nicht speziell für wxWidgets entwickelt worden, so dass z.B. Zeichenkettenkonvertierungen fehlen, aber zumindest werden die neueren Eigenschaften der SQLite-Version 3.x unterstützt.
  • wxDatabase : Bei dieser wxWidgets-Klasse handelt es sich um den Nachfolger der Komponente databaselayer, eine Datenbank-Abstraktion, die transparent die Datenbanken SQLite3, PostGreSQL und MySQL/MariaDB unterstützt.

wxSQLite3 versucht nicht die zugrunde liegende Datenbank zu verstecken, sondern unterstützt im Gegenteil fast alle speziellen Eigenschaften der SQLite-Version 3.x wie z.B. die Bereitstellung benutzerdefinierter skalarer oder aggregierender Funktionen.

Da SQLite Zeichenketten in UTF-8-Codierung speichert, konvertieren die wxSQLite3 Methoden automatisch zwischen wxString-Zeichenketten und UTF-8-Zeichenketten. Am besten funktioniert dies für die Unicode-Version von wxWidgets.

Die mit Doxygen generierte wxSQLite3-Dokumentation ist online verfügbar. Alternativ kann sie aus dem entsprechenden GitHub-Branch heruntergeladen werden.

Verschlüsselung

Beginnend mit wxSQLite3-Version 4.0.0 wurde die Verschlüsselungskomponente dahingehend angepasst, dass das Verschlüsselungsverfahren zur Laufzeit ausgewählt werden kann. Folgende Methoden werden derzeit unterstützt:

  • AES 128 Bit CBC - Ohne HMAC (wxSQLite3, Standardverfahren bis Version 3.5.9)
  • AES 256 Bit CBC - Ohne HMAC (wxSQLite3)
  • ChaCha20 - Poly1305 HMAC (sqleet, neues wxSQLite3-Standardverfahren)
  • AES 256 Bit CBC - SHA1/SHA256/SHA512 HMAC (SQLCipher, Datenbankversionen 1, 2, 3 und 4)
  • RC4 - Ohne HMAC (System.Data.SQLite) [seit Version 4.6.0]
  • Ascon 128 - Ascon Tag (Ascon) [seit Version 4.9.8]
  • AEGIS - AEGIS Tag (AEGIS) [seit Version 4.10.0]

Beginnend mit wxSQLite3-Version 3.1.0 wurden die wxSQLite3-Verschlüsselungsverfahren AES-128-Bit und AES-256-Bit angepasst, um ein potentielles Problem mit der Erstellung unbrauchbarer verschlüsselter Datenbanken zu beheben.

Die Wahrscheinlichkeit, dass Anwender früherer Versionen der Verschlüsselungskomponente von dem Problem betroffen sind, ist relativ gering, nämlich höchstens 1 zu 8192, d.h., weniger als 0,02 %. Nichtsdestoweniger wurde beschlossen, diesen Schwachpunkt der Implementierung zu beheben.

Von jetzt an werden die Bytes 16 bis 23 des Datenbankkopfes unverschlüsselt gespeichert (so wie es auch in der kostenpflichtigen Verschlüsselungskomponente SEE (SQLite Encryption Extension) der SQLite-Entwickler der Fall ist). Dies ist wichtig, da diese Bytes im SQLite-Code gelesen und interpretiert werden, bevor jedwede Verschlüsselungskomponente die Chance erhält, den Datenbankkopf zu entschlüsseln.

Die gute Nachricht für Anwender früherer Versionen der wxSQLite3-Verschlüsselungskomponente ist, dass die neue Version bestehende verschlüsselte Datenbank transparent in das neue Format überführt. Allerdings funktioniert dies nur in eine Richtung, d.h., sobald eine Datenbankdatei in das neue Format überführt wurde, kann sie von früheren Versionden der Verschlüsselungskomponente nicht mehr verarbeitet werden. Stattdessen wird man die Fehlermeldung “Keine Datenbank oder verschlüsselt” erhalten.

Hinweise

Aufgrund einer Änderung im SQLite-Quellcode vom 7. Februar 2020 (“Simplify the code by removing the unsupported and undocumented SQLITE_HAS_CODEC compile-time option”) ist die Weiterpflege der bisherigen Implementierung der Verschlüsselungserweiterung nicht mehr mit vertretbarem Aufwand möglich. In dem separaten GitHub-Projekt SQLite3 Multiple Ciphers wird eine Neuimplementierung der Verschlüsselungserweiterung zur Verfügung gestellt, die mit zukünftigen SQLite-Versionen kompatibel ist. Beginnend mit Version 4.6.0 wird diese neue Implementierung in wxSQLite3 eingesetzt, indem die aggregierten Quelldateien von dort übernommen werden.

Die bisher im Zusammenhang mit Releases bereitgestellten vorkompilierten SQLite3-Binärdateien für Windows werden auch in Zukunft zur Verfügung gestellt - allerdings nunmehr im Projekt SQLite3 Multiple Ciphers.

Historie

Eine detaillierte Versionshistorie findet sich im Änderungs-Log.

0%