Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQLite DB verschlüsseln (https://www.delphipraxis.net/196096-sqlite-db-verschluesseln.html)

sko1 23. Apr 2018 08:05

Datenbank: SQLite • Version: 3 • Zugriff über: Firedac

SQLite DB verschlüsseln
 
Hallo,

wenn ich das Beispiel der SQlite-Datenbankverschlüsselung richtig verstehe, wird bei einer bestehenden Datenbank per FDSQLiteSecurity1 nur das Passwort und der Verschlüsselungsalgorithmus gesetzt und damit ist die DB dann "von außen" nicht mehr lesbar...

Nach dieser (einmaligen) Aktion wird dann mit der DB gearbeitet indem der FDConnection Passwort und Verschlüsselung beim Öffnen mitgegeben werden:

Delphi-Quellcode:
    FDConnection1.Params.DriverID := 'SQLite';
    FDConnection1.Params.Database := edtPath.Text;
    FDConnection1.Params.Values['Encrypt'] := cbMode.Items[cbMode.ItemIndex];
    FDConnection1.Params.Password := edtPwd.Text;

Ist das soweit richtig?

Ciao
Stefan

Daniel 23. Apr 2018 08:25

AW: SQLite DB verschlüsseln
 
Yepp. ;-)
Kurze Antwort, aber so mache ich es auch.
Wichtig ist nur, das Passwort dann gut genug zu verschlüsseln, sonst hast Du ggf. eine nach allen Regeln der Kunst z.B. mit AES256 verschlüsselte SQLite-DB, aber dennoch keinen guten Schutz, weil das Passwort irgendwo auftaucht, wo es das nicht sollte.

sko1 23. Apr 2018 10:16

AW: SQLite DB verschlüsseln
 
Danke, wieder ein Problem weniger :-)

Ciao
Stefan

sko1 23. Apr 2018 12:40

AW: SQLite DB verschlüsseln
 
Eine Nachfrage hätte ich da noch:

Mit
Delphi-Quellcode:
FDSQLiteSecurity.CheckEncryption;
bekomme ich ja den aktuellen Status der Datenbank, aber wenn ich vorher das Passwort setze bekomme ich Laufzeitfehler wenn die DB noch unverschlüsselt ist, setze ich das Passwort in FDSQLiteSecurity nicht und frage den Status ab bekomme ich einen Laufzeitfehler wenn die DB bereits verschlüsselt ist.

Diese Fehler treten im Beispiel nicht auf!
Ich erzeuge aber meine Komponenten zur Laufzeit und habe alle möglichen Properties des Beispiels kontrolliert, finde aber nicht die Stelle wo man die Exception verhindern kann!

Hat hierzu noch jemand eine Idee?

Ciao
Stefan

Mavarik 24. Apr 2018 13:34

AW: SQLite DB verschlüsseln
 
Hatte ich am Anfang auch...

Problem war die Reihenfolge...

Ich hab das hinbekommen - bin gerade nicht an meinem Rechner...

Workaround... :

Wenn die Datenbank verschlüsselt ist eine Datei BaseName.SCR anlegen... (Ohne Inhalt)

Delphi-Quellcode:
if Fileexists(Basename+'.SCR') then...
Ich schau aber gerne noch nach der "richtigen" Lösung.

Mavarik

sko1 24. Apr 2018 13:46

AW: SQLite DB verschlüsseln
 
Ja bitte schau mal!

Das mit der leeren Datei als Workaround habe ich nicht verstanden...

Ciao
Stefan

Nachtrag:
Jetzt habe ich es kapiert, ist die Datei (egal wie sie heißt) vorhanden, soll das Programm davon ausgehen dass die DB verschlüsselt ist?
Funktioniert aber nur eingeschränkt!
Wenn die DB z.B. gelöscht wird, wird sie beim ersten nächsten Zugriff wieder neu erst mal unverschlüsselt erstellt und die Kennzeichnungsdatei ist immer noch vorhanden...!

Mavarik 24. Apr 2018 14:34

AW: SQLite DB verschlüsseln
 
Zitat:

Zitat von sko1 (Beitrag 1400349)
Funktioniert aber nur eingeschränkt!
Wenn die DB z.B. gelöscht wird, wird sie beim ersten nächsten Zugriff wieder neu erst mal unverschlüsselt erstellt und die Kennzeichnungsdatei ist immer noch vorhanden...!

Deswegen eine Class Methode Kill, die beide Dateien löscht.

sko1 25. Apr 2018 06:11

AW: SQLite DB verschlüsseln
 
Wenn da manuell was gelöscht wird hilft die Class-Methode auch nicht..

Ciao
Stefan

KodeZwerg 25. Apr 2018 07:22

AW: SQLite DB verschlüsseln
 
Emba erklärt es ein wenig anders als Du beschreibst, vielleicht nochmal lesen und korrekt anwenden? Ich mein, eventuell hast Du einen Fehler im Code.
Funktion
Delphi-Quellcode:
FireDAC.Phys.SQLite.TFDSQLiteSecurity.CheckEncryption
gibt als Ergebniss
Zitat:

<unencrypted> = The database is not encrypted.
For example: aes-256 = The database is encrypted and the correct password is specified.
<encrypted> = The database is probably encrypted, but the specified password is not correct.
empty string = Some other error happened at encryption checking.
Ich kann nur wiederholen was da steht da ich selbst gerade an SQLite3 rumbastel allerdings ohne FireDAC/AnyDAC/UniDAC etc sondern nativ.

edit
RAD Studio Demo Code, vielleicht hilft Dir das.

Mavarik 25. Apr 2018 08:04

AW: SQLite DB verschlüsseln
 
Zitat:

Zitat von sko1 (Beitrag 1400411)
Wenn da manuell was gelöscht wird hilft die Class-Methode auch nicht..

Ciao
Stefan

Wo ist das Problem, vor einer Neuanlage die Reste zu löschen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz