|
written by T. Schmidt |
|
|
|
Es gibt verschiedene Möglichkeiten, um Datenbankinhalte vor unbefugtem Zugriff zu schützen. Die erste Stufe wird von den Möglichkeiten, die vom Betriebssystem zur Verfügung gestellt werden, gebildet. Je nach Sytem sind diese Möglichkeiten mehr oder weniger nützlich. Die zweite Stufe wird vom Datenbanksystem gebildet. Auch hier sind je nach verwendetem System die Möglichkeiten von Userverwaltung, Userprivilegien bis hin zur Datenverschlüsselung vorhanden oder nicht. Der sicherste Datenbestand ist der verschlüsselte. Hierbei gibt es jedoch zu beachten, das die Art und Stärke der Verschlüsselung und deren Methode auf die Verschlüsselungssicherheit wesentlichen Einfluss hat. Desweiteren ist ein verschlüsselter Datenbestand im Falle eines Systemcrash möglicherweise nicht mehr verwendbar. Somit ist ein Backupsystem zwingender Bestandteil einer Datenbankverschlüsselung. Das Backupsystem sollte in Realtime arbeiten, also jede Änderung des Datenbestandes protokollieren. Will man unabhängig vom verwendeten Datenbanksystem eine Verschlüsselung integrieren, dann ist eine Schnittstelle zwischen Anwendung und Datenbanktreiber notwendig. Die Borland Database Engine (BDE) bietet mit den Methodenaufrufen der BDE-API diese Schnittstelle an. Bevor die Daten in die Datenbankdatei geschrieben werden, kann man mit BDE-Methoden die Daten aufbereiten, mit Verschlüsselungsalgorithmen verschlüsseln und anschließend in das DB-File schreiben. Im Beispiel 1 ist dieser Vorgang dargestellt. Die Routine EncryptData stellt vereinfacht die Verschlüsselung dar. Die Daten werden bei diesem Vorgang sofort in die Datenbank eingetragen. Soll ein Rückgängigmachen der erfolgten Änderungen (RollBack) möglich sein, dann ist zusätzlich eine Transaktionskontrolle notwendig. Die BDE bietet zwei Lösungen für eine Transaktionskontrolle an. Mittels CachedUpdates oder mit Databasetransaction. Beispiel 2 implementiert zusätzlich eine Transaktionskontrolle mit Databasetransaction. Der umgekehrte Weg, die Daten aus der Datenbank auszulesen und an das Table weiterzugeben, erfolgt im Prinzip umgekehrt wie das schreiben der Daten. Das Fehlen einer Methode zum schreiben des Recordbuffers eines Table macht es erforderlich, eine Methode zu verwenden, die die einzelnen Feldinhalte aus dem Recordbuffer ausliest und der Table Methode SetFields übergiebt. Dabei sollte man beachten, das eventuell nicht alle Felder im RecordBuffer vom Table verwendet werden oder deren Reihenfolge abweicht. |
|
Beispiel 1. Verschlüsselung von Datenbankdaten
function fDbiEncryptData(Table: TTable): DBIResult; Beispiel 2. Mit TransactionControl var TranCurs: hDBIXact; function fDbiTransCryptData(Table: TTable):
DBIResult;
|
|
Microsoft © und Borland © sind eingetragene Warenzeichen. |