Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Feld durch verschlüsselten Text ersetzen (https://www.delphipraxis.net/158224-feld-durch-verschluesselten-text-ersetzen.html)

waldforest 9. Feb 2011 20:19

Datenbank: Firebird • Version: 2.1 • Zugriff über: Zeos

Feld durch verschlüsselten Text ersetzen
 
Hallo,
ich würde gerne ein Feld mit sich selbst nach Entschlüsselung in einer Firebirdtabelle ersetzen.
Hierzu dient die eigene Funktion Crypt, welche sich als Parameter zwei Textfelder bedient.

Ich habe dies derzeit wie folgt gelöst, dauert aber bei einer großen Datenbank endlos

Code:
  with Tabelle do
  begin
    for i := 1 To RecordCount do
    begin
      Edit ;
      FieldByName('name').Value := Crypt(name, "WEDRFXEFCRTT"));
     Next;
    end;
  end;
wie könnte ich dies über den SQL Update lösen ?

Update Tabelle set name = Replace( name, name Crypt(name, "WEDRFXEFCRTT"))

leider gelingt es mir nicht dei Funktion einzubinden. Hat hier jemand Erfahrung ?

Klaus01 9. Feb 2011 21:19

AW: Feld durch verschlüsselten Text ersetzen
 
Guten Abend,

so ganz habe ich es nicht verstanden was Du bezwecken willst.
Liegt vielleicht auch an den Bezeichnungen die Du verwendest.

sqlText := 'Update Tabelle set name ='+Crypt(name, "WEDRFXEFCRTT") + 'where name = name;';
dann die sqlQuery ausführen.

Grüße
Klaus

Luckie 9. Feb 2011 21:21

AW: Feld durch verschlüsselten Text ersetzen
 
Der Flaschenhals könnte auch die uns verheimlichte Funktion Crypt sein.

waldforest 9. Feb 2011 21:30

AW: Feld durch verschlüsselten Text ersetzen
 
Hallo,
leider funktioniert dies nicht.

Im Prinzip möchte ich ein Feld, welches verschlüsselt ist entschlüsseln. Hinter Crypt verbirgd sich eine Stringverschlüsselung welche als Parameter Strings benötigt und einen String zurück gibt..

Bei vorgeschlagener Vorgenhensweise erhalte ich die Exception, dass das Feld name nicht gefunden wurde.

Auch das Ersetzen durch
sqlText := 'Update Tabelle set name ='+ Crypt(Tabelle.FieildbyName('name').value, "WEDRFXEFCRTT"))+ 'where name = name;';


hilt nicht

Sir Rufo 9. Feb 2011 21:31

AW: Feld durch verschlüsselten Text ersetzen
 
Das mag schon möglich sein, aber ein Flaschenhals ist definitiv das Update mit dem gezeigten Verfahren.

Dafür sollte man ein prepared Statement mit einem Parameter nehmen.
Das geht erheblich schneller.

Eine Query erstellen mit folgendem SQL-Text
Code:
UPDATE MeineTabelle SET name = :CryptName WHERE MeineTabelle.ID = :ID
Die DataSource der Abfrage-Query als MasterSource der Update-Query festlegen.
Delphi-Quellcode:
UpdateQuery.Prepare;
try
while not AbfrageQuery.EOF do
  begin
    UpdateQuery.ParamByName( 'CryptName' ) := Crypt( AbfrageQuery.FieldByName( 'name' ).AsString );
    UpdateQuery.ExecSQL;
    AbfrageQuery.Next;
  end;
finally
  UpdateQuery.Unprepare;
end;
Ob der Aufruf genau so funktioniert hängt von den verwendeten Komponenten und DB ab.

Zitat:

Zitat von waldforest (Beitrag 1080687)
Hallo,
leider funktioniert dies nicht.

Im Prinzip möchte ich ein Feld, welches verschlüsselt ist entschlüsseln.

Bei vorgeschlagener Vorgenhensweise erhalte ich die Exception, dass das Feld name nicht gefunden wurde.

Auch das Ersetzen durch
sqlText := 'Update Tabelle set name ='+ Crypt(Tabelle.FieildbyName('name').value, "WEDRFXEFCRTT"))+ 'where name = name;';
hilt nicht

Äh, bitte Transferleistung aktivieren ... DU kennst die korrekte Bezeichnung deiner Felder, WIR nicht!

Allerdings:
Code:
UPDATE
...
WHERE
  name = name
ist irgendwie sinnentleert, kann man dann auch gleich weglassen

Klaus01 9. Feb 2011 21:33

AW: Feld durch verschlüsselten Text ersetzen
 
so..

Deine Tabelle heißt Tabelle
Dein Feld heißt name
Deine StringVariable die du verschlüsselst heißt auch name

Da sehe mal einer durch.

Grüße
Klaus

waldforest 9. Feb 2011 21:47

AW: Feld durch verschlüsselten Text ersetzen
 
Vielen Dank,
Prepare kenne ich noch nicht, werde mich einmal damit befassen.

Leider funktioniert das mit Prepare nicht.
Scheint wohl mit Zeos und Firebird nicht zu funktionieren.

Sir Rufo 9. Feb 2011 22:03

AW: Feld durch verschlüsselten Text ersetzen
 
Da google auch dein Freund sein sollte findet der "bemühte" User den Hinweis, dass die Zeos-Komponenten das Prepared wohl automatisch eingebaut haben (ich setze die Zeos-Kompos nicht ein, sind mir zu langsam).

Also dann einfach die Werte durch den Parameter-Wolf drehen lassen.

Es würde ja auch helfen, die Zeiten zu messen, die du für das Verschlüsseln und für das Updaten der DB brauchst. Evtl. musst du an beiden Stellen schrauben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 Uhr.

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