AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQLite mit passwort -303 unsupported feature
Thema durchsuchen
Ansicht
Themen-Optionen

SQLite mit passwort -303 unsupported feature

Ein Thema von QuickAndDirty · begonnen am 13. Nov 2023 · letzter Beitrag vom 4. Jan 2024
Antwort Antwort
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.013 Beiträge
 
Delphi 12 Athens
 
#1

AW: SQLite mit passwort -303 unsupported feature

  Alt 11. Dez 2023, 10:39
Ich führe diesen Code noch vor dem Backup und Reorg der Sqlite Datenbank, beim start der App aus. Damit geht es.
Es befreit die Alte datenbank von dem Passwort und neue Datenbanken haben ja eh keins.
Delphi-Quellcode:
Function TDBHealth.CheckAndRemoveEncryption:Boolean;
Begin
  Result := False;
  TSync.DB_CS.Acquire;
  try
    var SQLiteSec := TFDSQLiteSecurity.Create(nil);
    try
      SQLiteSec.Database := FDatabase;
      SQLiteSec.Password := '';
      SQLiteSec.DriverLink := FPhysSQLiteDriverLink;
      var EncryptionStatus := SQliteSec.CheckEncryption;
      if EncryptionStatus = '<unencrypted>then
      Begin
        Result := true;
        TLog.d('TDBHealth.CheckAndRemoveEncryption: DB is unencrypted');
      End
      else if EncryptionStatus = '<encrypted>then
      Begin
        TLog.d('TDBHealth.CheckAndRemoveEncryption: Encrypted DB or corrupt file');
        TLog.d('TDBHealth.CheckAndRemoveEncryption: Check old DB-password start');
        SQLiteSec.Database := FDatabase;
        SQLiteSec.Password := TDBConstants.DBPASSWORD_OLD;
        EncryptionStatus := SQLiteSec.CheckEncryption;
        TLog.d('TDBHealth.CheckAndRemoveEncryption: Check old DB-password finish');
        if (EncryptionStatus <> '<unencrypted>') and
           (EncryptionStatus <> '<encrypted>') and
           (EncryptionStatus <> '') then
        Begin
          TLog.d('TDBHealth.CheckAndRemoveEncryption: DB is encrypted with old DB-password');
          TLog.d('TDBHealth.CheckAndRemoveEncryption: Decrypt DB start');
          try
            SQLiteSec.Database := FDatabase;
            SQLiteSec.Password := TDBConstants.DBPASSWORD_OLD;
            SQLiteSec.RemovePassword;
            Result := True;
          Except
            On E:Exception do
            Begin
              fCheckDBhealthError := 'Beim entschlüsseln der Datenbank ist folgender Fehler aufgetretetn:' +
                                     sLinebreak + e.message + slinebreak+
                                     'Die Datenbank ist vermutlich defekt.'  ;
             TLog.d('TDBHealth.CheckAndRemoveEncryption: Decrypt DB Error:' + e.message);
            End;
          end;
          TLog.d('TDBHealth.CheckAndRemoveEncryption: Decrypt DB finish');
        End
        else
        Begin
          //Fehler;
          fCheckDBhealthError := 'Beim Login in die SQLite Datenbank ist folgender Fehler aufgetretetn:' +
                                  sLinebreak + EncryptionStatus + slinebreak+
                                 'Die Datenbank ist vermutlich defekt.' ;
          TLog.d('TDBHealth.CheckAndRemoveEncryption: Error checking for encryption with old password returned:'+EncryptionStatus);
        End;
      End
      else if EncryptionStatus = 'then
      Begin
        //Fehler;// Sollte man es dann nochmal mit passwort versuchen?
        fCheckDBhealthError := 'Unknown error checking for unencrypted access. The DB is probably corrupt.';
        TLog.d('TDBHealth.CheckAndRemoveEncryption: Unknown error checking for unencrypted access. The DB is probably corrupt.');
      End;
    finally
      SQLiteSec.Free;
    end;
  finally
    TSync.DB_CS.Release;
  end;
End;
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.652 Beiträge
 
Delphi 12 Athens
 
#2

AW: SQLite mit passwort -303 unsupported feature

  Alt 11. Dez 2023, 12:57
Hallo Andreas,

danke für die Funktion. Das klappt erst einmal in einem Beispielprojekt und wäre eine Möglichkeit, dies in mein Projekt einzubauen. Bei neuen Projekten lösche ich einfach das Passwort. Dann geht es unter Windows.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
FreddyH

Registriert seit: 16. Jan 2011
Ort: Malchow
16 Beiträge
 
Delphi 12 Athens
 
#3

AW: SQLite mit passwort -303 unsupported feature

  Alt 16. Dez 2023, 08:36
Guten Morgen.

Ich habe leider das selbe Problem wir Ihr, nur habe ich noch eine Verständnisfrage:

Warum kann ich das Passwort beim App-Start löschen und
wenn ich das später machen möchte geht es nicht mehr.

Kann mir da jemand eine Antwort geben?
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.652 Beiträge
 
Delphi 12 Athens
 
#4

AW: SQLite mit passwort -303 unsupported feature

  Alt 17. Dez 2023, 09:01
Soweit wie ich das verstanden habe, kann das neue Delphi keine kostenlose Verschlüsselung mehr. Daher habe ich beim Anlegen einer Datenbank das Passwort ='' gesetzt. Damit funktioniert es bei mir.
Bei einer Datenbank mit Passwort habe ich die Funktion weiter oben genutzt. Damit konnte ich dann auch weiterarbeiten.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
FreddyH

Registriert seit: 16. Jan 2011
Ort: Malchow
16 Beiträge
 
Delphi 12 Athens
 
#5

AW: SQLite mit passwort -303 unsupported feature

  Alt 18. Dez 2023, 10:51
1000 Dank an Euch.
Ihr habt mir Weihnachten gerettet.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.013 Beiträge
 
Delphi 12 Athens
 
#6

AW: SQLite mit passwort -303 unsupported feature

  Alt 20. Dez 2023, 16:26
Guten Morgen.

Ich habe leider das selbe Problem wir Ihr, nur habe ich noch eine Verständnisfrage:

Warum kann ich das Passwort beim App-Start löschen und
wenn ich das später machen möchte geht es nicht mehr.

Kann mir da jemand eine Antwort geben?
Du musst das machen wenn keine Connection auf der Datenbank aktiv ist.
Also vorzugsweise VOR allem anderen! PLUS, auf diese Weise kannst du
weiter auf die Standard Ausführung Datenbank bleiben. Aber dafür ist die DB dann nicht verschlüsselt...!

Und wenn du das gemacht hast solltest außerdem direkt danach also noch vor dem eigentlichen start der APPlogik die die DB benötigt
die Indices der SQLITE Datenbank validieren (SQLITE dbs können kaputt gehen).

TFDSQLiteValidate.CheckOnly kann das



Danach noch die SQLITE DB verkleinern und defragmentieren(als gelöscht markierte records auch tatsächlich löschen)

TFDSQLiteValidate.sweep kann das

Danach noch die Analyse für die Datenbank starten damit sie schneller wird

TFDSQLiteValidate.Analyze kann das
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
FreddyH

Registriert seit: 16. Jan 2011
Ort: Malchow
16 Beiträge
 
Delphi 12 Athens
 
#7

AW: SQLite mit passwort -303 unsupported feature

  Alt 20. Dez 2023, 22:51
Dankeschön für deine ausführliche Beschreibung.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: SQLite mit passwort -303 unsupported feature

  Alt 2. Jan 2024, 10:29
Es gibt gerade 3 Threads mit dem gleichen Thema.

SEE…

Aber keiner will $2000 zahlen.

Ich kenne mich zwar damit nicht aus, aber ist das wirklich Rocketsience oder warum gibt es dafür noch keinen Freeware/Open Source Ersatz?

Mavarik
  Mit Zitat antworten Zitat
johndoe049

Registriert seit: 22. Okt 2006
175 Beiträge
 
#9

AW: SQLite mit passwort -303 unsupported feature

  Alt 2. Jan 2024, 11:22
Es gibt gerade 3 Threads mit dem gleichen Thema.

SEE…

Aber keiner will $2000 zahlen.

Ich kenne mich zwar damit nicht aus, aber ist das wirklich Rocketsience oder warum gibt es dafür noch keinen Freeware/Open Source Ersatz?

Mavarik
SQLite hat eine transparente Echtzeitverschlüsselung. D.h. die Engine übernimmt die komplette Verschlüsselung und das Zugriffsmanagement. Zwar keine Raketenwissenschaft, jedoch schwer einzubauen, wenn der Hersteller von SQLite den Zugriffspunkt/Einsprungpunkt für ein externes Verschlüsselungsmodul aus dem Open Source entfernt und kostenpflichtig macht. Da muss man selbst nach dem Einsprungpunkt für das Speichern/Lesen suchen und dann einbauen. Da ist es einfacher, einzelne Felder mit wichtigen Daten Satzweise zu verschlüsseln.

SQLite mit Verschlüsselung als Open Source gibt es bei Zetetic.net. Man muss es nur selbst kompilieren.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz