Lokal verschlüsselte DB ohne zusätzl. App

Alles rund um die Programmierung mit Qt
Antworten
spawnb
Beiträge: 28
Registriert: 23. März 2009 08:18

Lokal verschlüsselte DB ohne zusätzl. App

Beitrag von spawnb »

Hallo,

Mein Ziel ist die Verwendung einer Verschlüsselten DB, die nur aus einer Datei besteht und ohne zusätzliche Software auskommt.

Mit Hilfe von SQLITE kann ohne Probleme eine neue DB angelegt oder geöffnet werden, siehe folgendes Bsp:

Code: Alles auswählen

QSqlDatabase database = SqlDatabase::addDatabase("QSQLITE")
database.setDatabaseName(C:\Test\testdb.xdb);
database.open();
Leider unterstützt der mitgelieferte SQLite Treiber keine Verschlüsselung.
Das einzige was ich gefunden habe dazu ist: "wxSQLite3", nur wieder leider ohne jegliche Anleitung wie ich das in Qt verwenden kann

Andere Möglichkeiten wie MySQL die von Haus aus eine Verschlüsselung besitzten, kann ich bisher leider nur über einen passenden Server erreichen, z.Bsp:

Code: Alles auswählen

QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL");
database.setHostName("localhost");
database.setDatabaseName("xxxx");
database.setUserName("xxxx");
database.setPassword("xxxx");
Nur möchte ich kein zusätzliches Programm wie z.Bsp. einen MySQL-Server installieren.

Hat jemand auf die Schnelle einen Tipp, eine lokale DB in Form einer Datei mit Verschlüsselung zu nutzen ?
.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Für mysql braucht man schon lange keinen Server mehr einrichten, jedenfalls nicht als normaler User. Entweder mysql-embedded nutzen, oder als User einen eigenen mysqld-Prozess starten. In beiden Fällen kümmert sich der User um nichts, der Programmierer kann MySQL entsprechend konfigurieren. (Siehe z.B. amarok(embedded) oder akonadi(user-mysqld)).

Mit sqlite kannst du doch selber die db-Datei verschlüsseln. Bei Programmstart entschlüsseln (in eine temporäre Datei), beim Beenden wieder verschlüsseln, die temporäre Datei löschen.
spawnb
Beiträge: 28
Registriert: 23. März 2009 08:18

Beitrag von spawnb »

Hiho,

danke für die schnelle Antwort.

@MySQL
Du sagst man brauch als User keinen Server und kann z.B. mysql-embedded nutzen.

Sofern ich dich richtig verstanden habe, läuft es dann so wie gewünscht über eine lokale Datei, hier die Frage wie verwende ich so etwas in c++/Qt mir ist bisher nur die obere Variante bekannt.

@SQLite
Hört sich interessant an, kannst du etwas genauer erläutern was du meinst mit: "selber Verschlüsseln"
Versteh ich das richtig das du die einzelnen Einträge der Tabellen verschlüsseln willst?

Edit: arrh denk denk,
Selber verschlüsseln, an sich ok aber wenn jemand die Temporäre Datei während des Programmlaufes findet, wars das mit Sicherheit, denke das geht eher nicht aber trotzdem danke für die Idee
Nur als Info, gibt es den ein schönes HowTo zum verschlüsseln von Dateien?
philistion
Beiträge: 22
Registriert: 8. Februar 2010 09:37

Beitrag von philistion »

Also, ich würde alle Zugriffe auf die Datenbank nicht mehr per Qt machen, sondern das ganze über eben diesen Wrapper, dieses WXSqlite3 machen. Das heißt eben, dass du dir z.B. etwaige Qt-Datenbankmodels selbst schreiben musst, wo du die Daten manuell (eben mit dem Wrapper) rausholst und dabei auch eine Verschlüsselung verwenden kannst.

Soweit ich weiß, kann man SQLITE aber auch mit gewissen Plugins/Modulen erweitern, d.h. hinzu-kompilieren und jenes (insofern überhaupt eines zur Verschlüsselung existiert) dann aktivieren.. bin aber nicht ganz sicher ob das eine empfehlenswerte Methode ist, da ja dann auch Qt neu (mit dieser speziellen SQLITE-Version) kompiliert werden müsste.

Die dritte Möglichkeit wäre, wenn du die Daten vor dem Schreiben in die Tabelle manuell verschlüsselst. Also z.B. vor allem die sensiblen Spalten..
Antworten