Autor Beitrag
olliterski
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 105
Erhaltene Danke: 2

Win7 64-Bit
D7 Ent.
BeitragVerfasst: So 30.06.13 19:56 
Hallo,

ich bin gerade dabei mich für ein kleines Programm mit SQLite3 zu beschäftigen.

Positiv finde ich ja daran, dass es...
- OpenSource ist
- nur eine DLL mitgegeben werden muss
- keine besonderen Serverinstallationen laufen müssen und die Weitergabe kostenlos ist

Negativ finde ich jedoch folgendes:

Ich habe mir den Wrapper von Tim Anderson runtergeladen und die aktuelle Version von SQLite3 - funktioniert soweit ganz gut.
Da ich aber Dateien an ein anderes Programm (und auch andere Personen) weitergeben möchte, wäre es schön, wenn man die DB verschlüsseln könnte.
Deshalb habe ich mir zur Verwaltung noch Navicat runtergeladen - damit kann man wunderbar seine DB´s in SQLite verwalten und auch neu erstellen.
Man kann dabei sogar ein Passwort vergeben, wie man es von größeren DB-Systemen gewohnt ist.
Dummerweise bekomme ich beim Aufruf einer verschlüsselten SQLite den 'schönen' Fehler 26 - File encrypted or not a Database!

Vielleicht gibt der Wrapper das garnicht her, oder, was ich garnicht mal ausschließen will bei einer Datenbank mit der ich mich erst seit kurzem beschäftige und trotz googlen keine Lösung finde,ich habe einen Fehler gemacht.

Das schöne an ner Connection mit SQLite - der Code ist so schön kurz...und sieht dann wie meiner aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
procedure TForm1.ToolButton1Click(Sender: TObject);
Var
  Database : TsqliteDatabase;
  Table : TSQLiteTable;
begin
  // DB anbinden
  Database := TsqliteDatabase.Create(  'Data\test1.sqlite' );
  // Passwort übergeben bevor irgendetwas anderes passiert
  Database.ExecSQL('Pragma key = koennteklappen');
  // Test-SQL absetzen UND DABEI KNALLTS!!!!
  // erzeugt Fehler '26 - not a Database or encrypted' !!!
  Table := Database.GetTable( 'SELECT * FROM test' );
  try
    // kann ich mir eigentlich sparen, aber kostet grad nix!
    Table.reset;
    While not Table.EOF do
      begin
       lb_1.Additem(Table.FieldAsString(0)+' - '
                   +Table.FieldAsString(1)+' - '
                   +Table.FieldAsString(2),lb_1);
       Table.Next;
      end;
    Table.Free;
  finally
   database.Free;
  end;
end;


Ohne Zeile 9 und ohne Passwort in der DB funktioniert das Teil sogar - aber ich MUSS die DB verschlüsselt weitergeben, sonst ist es witzlos!!

Und ich habe trotz viel Rumprobiererei und Sucherei im Netz keine Lösung gefunden!
Frage: Wie kann ich einer verschlüsselten SQLite-DB ein PWD zum entschlüsseln übergeben?

PS1: ich hab mal 'versucht' statt ExecSQL den Befehl sqlite3_exec(...) zu benutzen, sogar nach Anleitung.
Da ist mir das System ja total abgedreht!
Die angezeigten Fehlermeldungen und meine Reaktionen darauf, würden hier leider auskommentiert werden! War jedenfalls stinksauer!!!

PS2: kennt sich jemand mit Ultralite von Sybase aus, eventuell sogar mit dem Lizenzmodell? Wäre zumindest eine Alternative!

PS3: Wenn es natürlich eine andere kostenfreie Alternative zum Wrapper von T.Anderson gibt die sich unkompliziert einbinden läßt und einfacher handhabbar ist, wäre ich natürlich für einen solchen Vorschlag auch nicht sauer!

_________________
Viele Grüße
Oliver
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Di 02.07.13 18:58 
Eine Alternative zu SQLLite - zumindest zu kostenfreien Alternativen - kann ich nicht geben; aber warum muss die gesamte Datenbank verschlüsselt sein?
Alternativ wäre möglich, die relevanten Daten via Programmcode zu verschlüsseln. Da gibt es freie Komponenten, zum Teil mit 3DES und vielem mehr. (siehe TurboPower LockBox)

Eine bezahl-Variante für SQLLite Wrapper wären die UniDac von Devart.

Msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 03.07.13 08:08 
Manchmal hilft Handbuchlesen ;-)

SEE ist eine kommerzielle Erweiterung. Ohne die kann das nicht gehen, damit verdienen die ihr Geld.
Warum genau brauchst du das? "Weil du die Dateien weitergeben willst" klingt als Begründung schwer nach Security by Obscurity...

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
olliterski Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 105
Erhaltene Danke: 2

Win7 64-Bit
D7 Ent.
BeitragVerfasst: Do 04.07.13 08:40 
Hallo,

@Martok:
hab ich gemacht! Habe auch gesehen, dass SEE kostenpflichtig ist. Wäre normalerweise kein Thema, aber für meinen Anwendungsfall völlig überzogen.
Ausserdem hatte ich folgende Überlegung. Wenn NaviCat Lite eine DB verschlüsseln und auch entschlüsseln kann, sollte das auch mit normalen Boardmitteln möglich sein - und darauf gab es nunmal im Handbuch nicht wirklich einen direkten Verweis - ausser den auf SEE!
Denn irgendwie müssen die von Navicat Lite das ja auch hinbekommen haben - und ich unterstelle denen nunmal, dass sie sich nicht einen Zusatz für 2000 $ kaufen und in eine kostenfreie Version einbauen!

Mir gings halt nur darum, das die Daten nicht einsehbar sind. Und die *.sqlite kann man sich leider im Editor ansehen und so die Daten betrachten.

@MSCH:
Danke für den Hinweis!!! Hat mich in diesem Zusammenhang weitergebracht!!!
Die Ver- und Entschlüsselung von Daten per Programm und das anschließende Ein- bzw. Auslesen der Daten macht damit natürlich auch das was ich wollte.
Ist zwar nicht zu 100% das was ich wollte, aber dennoch eine Alternative die ohne größeren Aufwand, das macht was es soll!

_________________
Viele Grüße
Oliver
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Mi 10.07.13 09:19 
Hallo,
denk mal über folgende Alternativen nach:

1. einfache XML-Datei mit einem kleinen Wrapper, das dir die Datensätze ausließt und dem Programm zur Verfügung stellt. Die XML kannst du dann bel. verschlüsseln
2. TClientDataset: dem kannst Du auch einen TStream unterjubeln, d.h. die Datei von der Platte in einen Stream, den dann entschlüsseln (da gibts haufenweise Libs dazu) und dem ClientDataset zuweisen. Dann kannst Du auch Datenbankkomponenten für die Oberfläche verwenden

Grüße