AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Advantage Database Server - Verschlüsselung - Abfragen
Thema durchsuchen
Ansicht
Themen-Optionen

Advantage Database Server - Verschlüsselung - Abfragen

Ein Thema von BOH · begonnen am 29. Jan 2008 · letzter Beitrag vom 30. Jan 2008
Antwort Antwort
BOH

Registriert seit: 6. Feb 2007
50 Beiträge
 
Delphi 5 Professional
 
#1

Advantage Database Server - Verschlüsselung - Abfragen

  Alt 29. Jan 2008, 11:31
Datenbank: Advantage Database Server • Version: 6.11 • Zugriff über: TDataSet Descendant V6.11
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...

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:
Ein Auszug aus der Knowledge Base:

"This is not a bug but expected behavior. The 6.1 and newer client now correctly throws the 5098 error.

To fix any problems the 5098 error may cause, either trap the error or call AdsIsTableEncrypted before calling AdsEncryptTable."
Schön und gut, aber selbst ein try/except oder das vorherige Abfragen auf Verschlüsselung läßt mich in den selben Fehler laufen...


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:
Eine Information aus der Knowledge Base:

"For tables that are not associated with a Data Dictionary (free tables), encrypted tables must be opened with adCmdTableDirect. To use encrypted tables with SQL (adCmdText), add the tables to a Data Dictionary and use a Database Connection."
...die ich aber nicht so wirklich umsetzen kann...


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...
  • Hat jemand Erfahrungen mit dem Verschlüsseln von ADS-Tabellen in V6.11
  • Wie kann ich eine verschlüsselte Tabelle in eine Abfrage einbinden?
  • Mit den Begriffen adCmdTableDirect und adCmdText kann ich nichts anfangen:
    Wo soll ich die anwenden?
  • Würde es helfen, ein zentrales Datenmodul zu verwenden?
  • Würde es helfen, ein Data Dictionary anzulegen (hab noch nie damit gearbeitet...)?

Quellcode/Beispiel:

Es gibt da nicht wirklich viel zu coden.

Zum einen laut Advantage das hier:

Delphi-Quellcode:
procedure TForm2.KundenTableAfterOpen(DataSet: TDataSet);
begin
  KundenTable.AdsEnableEncryption( 'passwort' );
end;
Zum anderen mit vorheriger Abfrage auf Verschlüsselung:

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.
Gruß
BOH
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#2

Re: Advantage Database Server - Verschlüsselung - Abfragen

  Alt 29. Jan 2008, 12:11
Zitat von BOH:
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.
diese Methode verschlüsselt die Tabelle. Ist sie aber schon, d.h. du musst nur dem ADS mitteilen, welches Passwort er nehmen soll:
Delphi-Quellcode:
  AdsTable1.TableName:='buddies';
  AdsTable1.EncryptionPassword:='geheim';
  AdsTable1.Open;
Zitat:
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...
Bei Queries musst du dem ADS für jede beteiligte Tabelle mitteilen, wie das Passwort lautet:
Delphi-Quellcode:
  AdsQuery1.SQL.Text:='select * from buddies';
  AdsQuery1.AdsStmtSetTablePassword('buddies','geheim');
  AdsQuery1.Open;
Zitat:
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...
Das ist aber schade. Nicht nur, weil dann meine Provision kleiner ausfällt sondern auch, weil die 6er schon seit langem nicht mehr supported wird. Auch für die 7er wird der Support demnächst auslaufen.
Zitat:
Meine Fragen:
Ich weiß, pro Thread nur eine Frage, aber es geht ja um "nur" ein Problem...
  • Hat jemand Erfahrungen mit dem Verschlüsseln von ADS-Tabellen in V6.11
  • Wie kann ich eine verschlüsselte Tabelle in eine Abfrage einbinden?
  • Mit den Begriffen adCmdTableDirect und adCmdText kann ich nichts anfangen:
    Wo soll ich die anwenden?
  • Würde es helfen, ein zentrales Datenmodul zu verwenden?
  • Würde es helfen, ein Data Dictionary anzulegen (hab noch nie damit gearbeitet...)?
  • ja, ich
  • s.o.
  • ad... kommen von ADO
  • wäre auf jeden Fall einfacher
  • wäre auch auf jeden Fall einfacher, weil dann die Ver-/Entschlüsselung nicht mehr vom Programm gesteuert werden muss, sondern transparent im Hintergrund geschieht
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
BOH

Registriert seit: 6. Feb 2007
50 Beiträge
 
Delphi 5 Professional
 
#3

Re: Advantage Database Server - Verschlüsselung - Abfragen

  Alt 29. Jan 2008, 12:23
Hallo Joachim,

vielen Dank für Deine prompte und ausführliche Antwort Ich wußte, ich kann mich auf Dich verlassen

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 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
Gruß
BOH
  Mit Zitat antworten Zitat
BOH

Registriert seit: 6. Feb 2007
50 Beiträge
 
Delphi 5 Professional
 
#4

Re: Advantage Database Server - Verschlüsselung - Abfragen

  Alt 29. Jan 2008, 13:11
Zitat von joachimd:
Delphi-Quellcode:
  AdsTable1.TableName:='buddies';
  AdsTable1.EncryptionPassword:='geheim';
  AdsTable1.Open;
Öhm, Joachim, ich hab bei AdsTable kein EncryptionPassword, dem ich ein Passwort zuweisen kann... Hab auch nichts ähnliches gefunden...
Gruß
BOH
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#5

Re: Advantage Database Server - Verschlüsselung - Abfragen

  Alt 29. Jan 2008, 15:00
Zitat von BOH:
Öhm, Joachim, ich hab bei AdsTable kein EncryptionPassword, dem ich ein Passwort zuweisen kann... Hab auch nichts ähnliches gefunden...
Ich habe schon lange nicht mehr mit der 6er gearbeitet, sorry. Du hattest mit AdsEnableencryption doch recht und ich lag falsch (habe es mit AdsEncryptTable verwechselt). Wie schön einfach die gute neue Welt doch ist
In meiner Version des ADS TDataset wird das Passwort wie folgt übergeben:

Delphi-Quellcode:
   {* 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;
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:

Delphi-Quellcode:
  
if (AdsTable1.AdsIsTableEncrypted and not AdsTable1.AdsIsEncryptionEnabled)
  then AdsTable1.AdsEnableEncryption('geheim');
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
BOH

Registriert seit: 6. Feb 2007
50 Beiträge
 
Delphi 5 Professional
 
#6

Re: Advantage Database Server - Verschlüsselung - Abfragen

  Alt 29. Jan 2008, 15:15
Zitat von joachimd:
Ich habe schon lange nicht mehr mit der 6er gearbeitet, sorry.
Kein Problem, ich bin ja derjenige, der mit Problemen auf antiquierten Systemen ankommt und bin für jede Hilfe dankbar

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 Vorallem, weil ich Dich dazu "genötigt" habe, verstaubte Server und Komponenten wieder aus dem Keller zu holen...
Gruß
BOH
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#7

Re: Advantage Database Server - Verschlüsselung - Abfragen

  Alt 29. Jan 2008, 15:50
Zitat von BOH:
Vorallem, weil ich Dich dazu "genötigt" habe, verstaubte Server und Komponenten wieder aus dem Keller zu holen...
Ich weiß nicht mehr, wie wir das früher ohne VMWare nur gelöst haben...zum Glück kostet Plattenplatz fast nix mehr.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
BOH

Registriert seit: 6. Feb 2007
50 Beiträge
 
Delphi 5 Professional
 
#8

Re: Advantage Database Server - Verschlüsselung - Abfragen

  Alt 30. Jan 2008, 11:50
Ja, stimmt, ist eine wunderbare Sache und erleichtert einem so einiges
Gruß
BOH
  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 12:18 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