![]() |
Datenbank: Advantage Database Server • Version: 6.11 • Zugriff über: TDataSet Descendant V6.11
Advantage Database Server - Verschlüsselung - Abfragen
Hallo DP-Datenbänker,
wahrscheinlich spreche ich hiermit Joachim Dürr am besten direkt an, da er mir bei meinem Problem wohl am ehesten helfen kann. Was nicht heißen soll, daß niemand anders hierauf antworten darf... :wink: Anforderung: Ich soll eine vorhandene Datenbankanwendung, mit Delphi 5 Pro geschrieben, die auf einen älteren Advantage Datenbankserver der Version 6.11 aufsetzt, so umschreiben, daß zumindest eine wichtige Tabelle verschlüsselt ist. (Tabelle ist eine dBase-Tabelle mit cdx-Index) Vorgehensweise: Die entsprechende Tabelle habe ich mit Advantage Data Architect (V6.11.0.6) verschlüsselt. Nun heißt es bei Advantage, sofern ich das richtig verstanden habe, daß es ausreicht, wenn ich im Ereignis "AfterOpen" der Tabelle "Table.AdsEnableEncryption( 'passwort' )" ausführen lasse. Klappt im Prinzip auch. Nur: Die Anwendung ist in meinen Augen nicht so glücklich aufgebaut, was die Tabelleneinbindung angeht. Es besteht kein zentrales Datenmodul, worauf zugegriffen wird, es gibt auf vielen Formularen TTables, die auf die physikalisch selbe Tabelle zugreifen. Was zur Folge hat, daß die Tabelle je nach Formular, über ein anderes TTable geöffnet wird. Nun bekomme ich den Fehler "5098: The table is already encrypted.". Selbst, wenn ich nicht das TTable des aktuellen Formulars nutze, sondern Datasource auf z.B. das TTable der gleichen Tabelle auf dem MainForm einstelle. Muß ich die Anwendung nun erstmal komplett auf ein zentrales Datenmodul umstellen? Obwohl das ja auch nicht zu helfen scheint, da das Umstellen der Datasource ja auch nichts gebracht hat. Oder hat die Vorgehensweise des ursprünglichen Entwicklers auch Vorteile? Also, ein und dieselbe Tabelle auf mehreren Formularen über TTable einzubinden und darüber explizit anzusprechen...?! Zitat:
Gleicher Fehler bei Abfragen: Den gleichen Fehler erhalte ich allerdings andauernd, wenn ich die verschlüsselte Tabelle in eine Abfrage eingebunden habe. Auch wenn ich ähnlich wie bei TTable im AdsQuery.AfterOpen "Table.AdsEnableEncryption( 'passwort' )" ausführen lasse... Auf die Tabelle konnte ich ja schon das ein oder andere Mal zugreifen, bei Abfragen habe ich es noch nicht einmal geschafft, daß sie ausgeführt wird... :( Zitat:
Anmerkung: Leider steht ein Update auf einen neueren Server (V9 steht ja als Beta schon vor der Tür) momentan nicht zur Debatte und ist somit keine Option. Für den Fall, daß es da einfacher funktionieren würde... :( Meine Fragen: Ich weiß, pro Thread nur eine Frage, aber es geht ja um "nur" ein Problem...
Quellcode/Beispiel: Es gibt da nicht wirklich viel zu coden. Zum einen laut Advantage das hier:
Delphi-Quellcode:
Zum anderen mit vorheriger Abfrage auf Verschlüsselung:
procedure TForm2.KundenTableAfterOpen(DataSet: TDataSet);
begin KundenTable.AdsEnableEncryption( 'passwort' ); end;
Delphi-Quellcode:
procedure TForm2.KundenTableAfterOpen(DataSet: TDataSet);
begin if not KundenTable.AdsIsTableEncrypted then KundenTable.AdsEnableEncryption( 'passwort' ); end; Ich hoffe daß ich mein Problem einigermaßen verständlich geschildert habe und baue auf einen Denkanstoß von Eurer Seite. Bin mir halt nicht sicher, ob ich nun die Anwendung in Bezug auf die Datenverwaltung gänzlich umstellen muß (DatenModul/Data Dictionary) oder es doch einen einfacheren Weg gibt, um ans Ziel zu kommen. :thumb: |
Re: Advantage Database Server - Verschlüsselung - Abfragen
Zitat:
Delphi-Quellcode:
AdsTable1.TableName:='buddies';
AdsTable1.EncryptionPassword:='geheim'; AdsTable1.Open; Zitat:
Delphi-Quellcode:
AdsQuery1.SQL.Text:='select * from buddies';
AdsQuery1.AdsStmtSetTablePassword('buddies','geheim'); AdsQuery1.Open; Zitat:
Zitat:
|
Re: Advantage Database Server - Verschlüsselung - Abfragen
Hallo Joachim,
vielen Dank für Deine prompte und ausführliche Antwort :thumb: Ich wußte, ich kann mich auf Dich verlassen :-D Ich werde Deine Ratschläge sogleich mal testen. Auch den Aufwand für die Umstellung auf ein zentrales Datenmodul und/oder (?) ein Data Dictionary. Sollte ich beides machen? Das bedeutet auf jeden fall einen großen Eingriff, der sich aber langfristig sicher lohnen wird. Dachte ich mir auch schon, nur hab ich bisher den Aufwand gescheut... :? Das mit Deiner geschmälerten Provision tut mir leid, ich würde auch gerne auf den aktuellen ADS updaten, nicht nur deswegen :wink: Eine 6er Version ist einfach nicht mehr zeitgemäß und längst überholt. :? Kommt aber bei meinem Kunden im Moment aus Kostengründen leider nicht in Frage... Nochmals vielen Dank, ich werde meine Ergebnisse hier wieder posten :thumb: |
Re: Advantage Database Server - Verschlüsselung - Abfragen
Zitat:
|
Re: Advantage Database Server - Verschlüsselung - Abfragen
Zitat:
In meiner Version des ADS TDataset wird das Passwort wie folgt übergeben:
Delphi-Quellcode:
Die beiden Variablen sind vom Typ UNSIGNED16, Result ist das zurückzugebende Tabellenhandle (ADSHANDLE). Insgesamt dürfte die Abfrage direkt mit den Komponenten also so aussehen:
{* If the user supplied an encryption password, enable encryption now. *}
if ( FstrEncryptionPassword <> '' ) then begin {* * If the table isn't encrypted, and we call AdsEnableEncryption, it will * put the password into the table header, effectively encrypting all new * record updates. That is not the desired effect here, so first see if * the table is encrypted. Also check to see if encryption is already * enabled (which it is if opening a dictionary table) and don't enable * it twice. *} ACECheck( self, ACE.AdsIsTableEncrypted( Result, @usEncrypted ) ); ACECheck( self, ACE.AdsIsEncryptionEnabled( Result, @usEncryptionEnabled ) ); if ( ( usEncrypted = ADS_TRUE ) and ( usEncryptionEnabled <> ADS_TRUE ) ) then ACECheck( self, ACE.AdsEnableEncryption( Result, PChar(FstrEncryptionPassword) ) ); end;
Delphi-Quellcode:
if (AdsTable1.AdsIsTableEncrypted and not AdsTable1.AdsIsEncryptionEnabled) then AdsTable1.AdsEnableEncryption('geheim'); |
Re: Advantage Database Server - Verschlüsselung - Abfragen
Zitat:
Mein größtes Problem, das mit der Paßwortübergabe bei Queries, hattest Du ja bereits gelöst und mich damit einen Riesenschritt voran gebracht. Die Tabellen werde ich dann nun auch so problemlos öffnen können. Das Ganze sogar erstmal ohne Umstellung auf DataModule/Data Dictionary. Was wiederum den Auftraggeber freut, weil er so auch sparen kann. Besten dank für Deine wirklich schnelle Hilfe :thumb: Vorallem, weil ich Dich dazu "genötigt" habe, verstaubte Server und Komponenten wieder aus dem Keller zu holen... :? :zwinker: |
Re: Advantage Database Server - Verschlüsselung - Abfragen
Zitat:
|
Re: Advantage Database Server - Verschlüsselung - Abfragen
Ja, stimmt, ist eine wunderbare Sache und erleichtert einem so einiges :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 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