Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi verschlüsselte Felder in DB per Select auswählen? (https://www.delphipraxis.net/61271-verschluesselte-felder-db-per-select-auswaehlen.html)

Nju 19. Jan 2006 08:36

Datenbank: MS Access • Version: 2003 • Zugriff über: ADO

verschlüsselte Felder in DB per Select auswählen?
 
Hallo,
ich benutze MS Access als Grundlage eines Produktes und stehe nun an einem Problem. Da die Sicherheit von Access allgemein mies ist, musste ich eine Tabelle nehmen, in der sämtliche Daten, also jedes Feld einzeln, mit dem selben Schlüssel verschlüsselt worden ist.

Das Problem bei der ganzen Sache ist nun allerdings, dass eine einfache Select-Anweisung so nicht mehr greift, da die Daten ja vorher entschlüsselt werden müssen, bevor ich es als Klartext auswerten kann.

Ein vorheriges Einlesen in ein Array kommt auch nicht in Frage, da ungefähr 30000 Datensätze in der Tabelle vorhanden sind und somit die Speicherbelastung zu groß wäre. Kann mir da jemand einen pfiffigen Lösungsansatz nennen?

Gruß

Frank alias Nju

tomsel 19. Jan 2006 09:04

Re: verschlüsselte Felder in DB per Select auswählen?
 
Wäre es prinzipiell machbar, die die Selektionskriterien enthaltenden Variablen ebenfalls zu verschlüsseln? Beim Aufbau eines SQL-Strings gäbe es damit sicher Probleme, aber per Parameter müsste es doch gehen? Das würde aber, wenn überhaupt, nur mit Strings und dann auch nur für die Selektion nach Gleichheit funktionieren.

Nju 19. Jan 2006 09:16

Re: verschlüsselte Felder in DB per Select auswählen?
 
Inwiefern meinst du das? Es wäre sehr freundlich, wenn Du mir ein Beispiel geben würdest (in Bezug auf "Übergabeparameter"). :)

shmia 19. Jan 2006 09:21

Re: verschlüsselte Felder in DB per Select auswählen?
 
Zitat:

Zitat von Nju
ich benutze MS Access als Grundlage eines Produktes und stehe nun an einem Problem. Da die Sicherheit von Access allgemein mies ist, ...

Das stimmt so nicht.
Man kann einer Access-Datenbank ein Datenbankkennwort verpassen.
Dafür gibt es im Internet Programme, die das Passwort ermitteln können.

Man kann aber auch mit einer Workgroup-Datei (*.MDW) arbeiten.
Man kann so jeder Tabelle oder View bestimmte Berechtigungen erteilen.
Die Datenbank kann nur zusammen mit der *.MDW Datei sowie User und Passwort geöffnet werden.
Wenn User und Passwort nur innerhalb deiner Anwendung bekannst sind, ist die Datenbank sicher.

Deine Idee, die Felder zu verschlüsseln kann nur für ganz wenige Felder einen Sinn machen.
Würdest du alle Felder verschlüsseln wollen, dann würde dich dies extremst einschränken.
Du kannst dann nur Stringfelder benutzen.
Du hast kein Tool, um die Datenbank zu administrieren. (MS Access zeigt dann nur Ützelbrützel an)

tomsel 19. Jan 2006 09:30

Re: verschlüsselte Felder in DB per Select auswählen?
 
Beispiel mit Parametern:

Delphi-Quellcode:
...
ADOQuery.SQL.Text := 'select * from tabelle where feld = :param';
ADOQuery.ParamByName('param').asstring := Encode('Suchstring'); // Encode = Verschlüsselungsfunktion vom Typ String
ADOQuery.Open;
...
Ein solches Vorgehen ist aber auf keinen fall empfehlenswert, war nur so ne Idee, da Du deine Datenbank offensichtlich unbedingt feldweise verschlüsseln WILLST. Unklar ist auch, ob Access mit den aus der Verschlüsselung resultierenden Strings überhaupt arbeiten kann.

Nju 19. Jan 2006 10:27

Re: verschlüsselte Felder in DB per Select auswählen?
 
Zitat:

Zitat von shmia
Man kann aber auch mit einer Workgroup-Datei (*.MDW) arbeiten.
Man kann so jeder Tabelle oder View bestimmte Berechtigungen erteilen.
Die Datenbank kann nur zusammen mit der *.MDW Datei sowie User und Passwort geöffnet werden.
Wenn User und Passwort nur innerhalb deiner Anwendung bekannst sind, ist die Datenbank sicher.

Kannst Du mir einen Beispielquellcode geben, bei dem ich über Delphi die Workgroup-Datei einer bestehenden Datenbank hinzufüge? Da die Datenbank-Datei leider nicht ersetzt werden kann, noch per MS Access die Workgroup-Datei zugewiesen werden kann müsste ich per Quellcode die Zuweisung machen, oder sehe ich das falsch?

shmia 19. Jan 2006 11:08

Re: verschlüsselte Felder in DB per Select auswählen?
 
Zitat:

Zitat von Nju
Kannst Du mir einen Beispielquellcode geben, bei dem ich über Delphi die Workgroup-Datei einer bestehenden Datenbank hinzufüge? Da die Datenbank-Datei leider nicht ersetzt werden kann, noch per MS Access die Workgroup-Datei zugewiesen werden kann müsste ich per Quellcode die Zuweisung machen, oder sehe ich das falsch?

Ich kann dir leider keinen Beispielcode geben.
Aber ich würde so vorgehen:
Workgroupdatei SYSTEM.MDW in ein neues leeres Verzeichnis kopieren.
An diese Workgroupdatei anschliesen (da gibt's ein extra Tool dazu)

Man kann Access auch über Parameter starten, dann braucht man sich keine Workgroupdatei anschliesen:
Code:
"C:\Programme\Microsoft Office\Office\MSACCESS.EXE" C:\database\projekt.mdb /wrkgrp C:\database\projekt.mdw
Mit Access eine Neue, leere Datenbank erstellen.
Hier wird die Datenbank untrennbar mit der Workgroupdatei verheiratet.
Wenn die Workgroupdatei verloren geht, ist auch die Datenbank nicht mehr zu öffnen.

Neue User und Arbeitsgruppen einrichten, Passwörter vergeben.
Berechtigungen vergeben. Man muss sich da etwas einfuxen.
Und immer ein Backdoor für den Admin vorsehen.

Danach deine ursprüngliche Datenbank in die neue Datenbank importieren.

Nju 25. Jan 2006 13:37

Re: verschlüsselte Felder in DB per Select auswählen?
 
So, habe etwas damit rumgespielt und werde nicht ganz schlau daraus.

Ich habe einige Benutzer angelegt und mit Rechten versehen. Auf meinem eigenen Rechner bekomme ich nen Loginprompt. Wenn ich bei dem meine Logindaten korrekt eingebe erhalte ich die komplette Datenstruktur, also sprich: Alle Tabellen und deren Inhalte.

So ist es dann auch gedacht.

Der zweite Test befand sich auf meinem Zweitrechner. Dorthin habe ich die MDB- und auch die MDW-Datei geschickt. Der Klick auf die MDB-Datei quittiert das System korrekterweise mit einer "Ungenügend Benutzerrechte"-Meldung. Der Klick auf die MDW-Datei öffnet mir zwar die Datenbank, zeigt aber keine Tabellen an (zumal KEIN Loginprompt kam um sich zu identifizieren).

Der dritte Test war dann der Zugriff über Delphi über die ADOConnection, der dann aber an der Fehlermeldung, dass der Provider nicht initialisiert werden konnte, scheiterte.

Irgendwie werde ich daraus nicht wirklich schlau, zumal die Microsoft Hilfe zwar einiges zum Thema geschrieben hat, dieser Text allerdings dermaßen unübersichtlich dargestellt wird, so dass man nach kurzer Zeit keinen Durchblick mehr hat.

Kann mir da nochmal jemand helfen und evtl. eine Schritt-für-Schritt-Übersicht/Anleitung geben? Danke auf jeden Fall schonmal! :)

nieurig 25. Jan 2006 19:44

Re: verschlüsselte Felder in DB per Select auswählen?
 
Guten Abend,
zur "Sicherheit" von Access noch ein paar Worte.

Meine Erfahrung mit den Workgroup Dateien:
Man kommt leicht daran vorbei (ist sogar mir gelungen und ich bin wirklich kein Cracker). Je nach Access-Version reicht es schon eine leere DB zu erstellen und die Daten und Tabellen als externe Daten zu importieren.

Das mit dem Datenbankpasswort scheint nach meinen alten Recherchen im Internet auch nicht viel sicherer zu sein. Auch ich hatte mit Datenbanken bei denen ein solches Passwort vergeben war immer wieder Schwierigkeiten. Die größten Probleme hat man wenn die Datenbank mal wieder "korrupt" geworden ist. Dann verhindert das Passwort meist die üblichen Rettungsversuche.

Vielleicht ist der Weg der Verschlüsselung der Inhalte doch garnicht so schlecht (wenn es denn Access sein soll). Wie schon oben gesagt geht dies wohl am leichtesten bei Strings. Zur Not könnte man auch Zahlen als verschlüsselte Strings speichern und entsprechend darauf zugreifen. Der größte Nachteil scheint mir (neben dem Speicherverbrauch) die Tatsache, dass keine vernünfigen Schlüssel erstellt werden können (alles Strings) und die die Abfragegeschwindigkeit sicherlich einschränkt.

Viel Erfolg
Niels

Nju 30. Jan 2006 08:50

Re: verschlüsselte Felder in DB per Select auswählen?
 
Hm....also so langsam komme ich mit der Rechtevergabe klar, nur das Verbinden über Delphi scheint nun ein Problem zu werden. Hat jemand Erfahrung, ob das überhaupt funkioniert?

Und mal davon abgesehen, wäre das Sicherheitssystem, vom Firebird zum Beispiel, sicherer (also DB-Kennwort vergeben und auch nicht so "leicht" knackbar wie bei Access)?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr.
Seite 1 von 2  1 2      

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