Startseite > Tipps & Tricks > Datenbanken schützen
Team-Moeller.de - Datenbankentwicklung und mehr ...

Datenbanken schützen

Datenbanken schützen

Inhaltsübersicht:

  1. Einführung
  2. Datenbankennwort
  3. Verschlüsselung
  4. MDE-Datei erstellen
  5. Benutzerführung mit Popup-Formularen
  6. Menüleisten in Berichten
  7. Starteigenschaften von Access
  8. "Abschalten" der Shift-Taste
  9. Das Sicherheitssystem von Access
  10. Zusammenfassung
  11. Ergänzende Links
Diesen Text downloaden

1. Einführung

Mit der Sicherheit im EDV-Bereich ist das so eine Sache. Man sollte nie davon ausgehen, dass man etwas wirklich sicheres schafft. Dort wo genug Zeit und Energie aufgebracht wird, wird über kurz oder lang jedes Sicherheitssystem außer Kraft gesetzt. Mit seinen verschiedenen Maßnahmen kann man also nur versuchen, es "der anderen Seite" etwas schwerer zu machen.

Sicherlich kann man mit der einen oder anderen Maßnahme einen unbedarften Nutzer davon abhalten auf einfachste Art und Weise hinter die Geheimnisse der ihm vorliegenden Datenbank zu kommen. Wenn der Anreiz jedoch groß genug ist, werden entsprechende "Profis" Zeit und Energie aufwenden um schlußendlich auch hinter das ausgefeilteste Sicherheitssystem zu gelangen.

Fazit: Eine Datenbankanwendung kann nie wirklich sicher sein. Man kann es jedoch etwas schwerer machen, die vorhandenen Sicherheitsmaßnahmen zu umgehen.
In diesem Sinne sind die folgenden Ausführungen zu verstehen.

Zurück zur Übersicht

 

2. Datenbankkennwort

Als eine der ersten Maßnahmen wird jeder auf die Idee kommen, die Datenbank mit einem Kennwort zu versehen. Es geht ganz einfach: Unter EXTRAS / SICHERHEIT / DATENBANKKENNWORT ZUWEISEN ... kann man der Datenbank ein Kennwort zuweisen.

Um die Sicherheit dieses Kennwortes ist es jedoch nicht sehr gut bestellt. Es gibt im Internet einige Quellen, bei denen man sich ein Tool zum Knacken dieses Kennwortes herunterladen kann. In den Newsgroups wurde jüngst auch diskutiert, dass es auf einigen CD's zu Access- und Office-Büchern solche Tools gibt. Angeblich hat Microsoft beim Wechsel von der Version Access 95 nach Access 97 nichts an dem Datenbankkennwort verbessert. Der Algorithmus wurde ab Access 2000 verändert und leicht verbessert. Aber auch dieser wird von den von den angesprochenen Tools geknackt. Mit der Version Access 2007 hat Microsoft die Sicherheit des Datenbank-Kennwortes auf den aktuellen technischen Stand gebracht. Die Frage bleibt, wann das erste Tool, auftaucht, dass auch diesen Schutz knackt.

An dieser Stelle werden keine Links und weitere Hinweise auf solche Tools veröffentlicht. Ich bin nämlich der Meinung, dass das geistige Eigentum eines Datenbankentwicklers ein schützenswertes Gut ist. Immerhin hat er einiges an Zeit und Energie aufgewendet, um eine Datenbankanwendung zu erstellen. Ich weiß natürlich, dass ich damit das Knacken von Passwörtern nicht verhindern kann. Ich möchte es aber zumindest auch nicht unterstützen.

Wenn eine Datenbank als Front-End / Back-End-Lösung realisiert ist, kann man das Back-End mit einem Passwort schützen und die Datentabellen in das Front-End einbinden. Dabei wird nach dem Passwort des Back-End's gefragt und dieses wird zusammen mit der Information zur Verknüpfung gespeichert. Diese Informationen jetzt in den Systemtabellen von Access wieder lesbar zu machen ist sicher ein großer Aufwand. Aber den braucht keiner betreiben. Wer das Front-End öffnen kann, weil er dafür das notwendige Passwort besitzt, hat somit ungehinderten Zugriff auf die eingebundenen Tabellen das Back-End's.

Fazit: Das Datenbankpasswort stellt nur einen unzureichenden Schutz dar. Tools zum Ausspähen dieses Passwortes gibt es bereits. Eine Front-End / Back-End-Lösung kann durch ein Datenbankpasswort nicht umfassend geschützt werden.

Zurück zur Übersicht

 

3. Verschlüsselung

Eine weitere einfach Maßnahme für einen ersten Schutz einer Datenbankanwendung ist die Verschlüsselung. Mit EXTRAS / SICHERHEIT / DATENBANK VERSCHLÜSSELN ... kann man eine Datenbank verschlüsseln.

Mit dieser Verschlüsselung soll verhindert werden, dass jemand, der die Datenbank mit einem ASCII-Editor öffnet, die gespeicherten Daten im Klartext lesen kann.

Die Verschlüsselung basiert (auch noch bei Access 2002) auf einem 32-Bit-Schlüssel. So ein schwacher Schlüssel ist über Brute Force selbst mit einem Pentium 500 MHz innerhalb eines Tages geknackt. Aber dies ist noch nicht einmal notwendig, da der Schlüssel ja in der Datei stehen muss! Sonst wüsste ja auch Access nicht, wie die Datei zu entschlüsseln wäre. Auch hierzu gibt es inzwischen leider frei zugängliche Tools im Internet.

Fazit: Mit der Verschlüsselung kann verhindert werden, dass die Daten einfach mit einem ASCII-Editor ausgelesen werden können.

Zurück zur Übersicht

 

4. MDE-Datei erstellen

Ein weiterer Weg, eine Datenbank zu schützen, ist das Erstellen einer MDE-Datei. Dies geht ganz einfach mit EXTRAS / DATENBANK-DIENSTPROGRAMME / MDE-DATEI ERSTELLEN ...

Durch das Erstellen einer MDE-Datei wird der gesamte Quellcode der Datenbank entfernt und kompiliert gespeichert. Dadurch wird zum einen die Datenbank kleiner und in der Ausführung des Codes schneller. Zum anderen ist der Code in Formularen, Berichten und Modulen nicht mehr einseh- und editierbar. Außerdem können diese Elemente nicht mehr geändert werden.

Mit der Erstellung einer MDE-Datei werden nur die genannten Objekte geschützt. Tabellen und Abfragen lassen sich weiterhin in der Entwurfsansicht öffnen und verändern. Diese Elemente einer Datenbank werden also nicht geschützt.

Fazit: Mit der Erstellung einer MDE-Datei werden Formulare, Berichte und Module geschützt. Andere Objekte können weiterhin frei verändert werden.

Zurück zur Übersicht

 

5. Benutzerführung mit Popup-Formularen

Ein weiterer Weg, seine Datenbank vor neugierigen Usern zu schützen, ist der konsequente Einsatz von Popup-Formularen. Ziel ist es, dem User die Möglichkeit zu nehmen, auf die einzelnen Objekte der Datenbank zuzugreifen. Hierzu sind insgesamt sechs Schritte notwendig.

Als erstes sollte mit dem Übersichtsmanager ein Übersichtsformular erstellt werden. Mit diesem Übersichtsformular erfolgt die komplette Benutzerführung. Der direkte Zugriff auf die Objekte der Datenbank ist damit nicht mehr notwendig. Hierzu ist es erforderlich, dass alle vom User durchzuführenden Aktionen über Formulare, Berichte und Abfragen zugänglich sind und diese dann auch im Übersichtsformular eingetragen sind. Der Aufruf des Übersichtsmanagers erfolgt über EXTRAS / ADD-INS / ÜBERSICHTS-MANAGER.

Als zweites wird in jedem Formular eine Schließen-Schaltfläche eingebaut. Beim Ereignis "Beim Klicken" wird folgender Code eingegeben:
   DoCmd.Close
   Forms!frmÜbersicht.Visible=True

Als drittes wird für das Ereignis BEIM ÖFFNEN in jedem Formular der folgende Code eingegeben:
   Forms!frmÜbersicht.Visible=False

Als viertes werden bei den Formularen werden folgende Einstellungen vorgenommen:

  • Standardansicht: Einzelnes Formular
  • Zugelassene Ansicht: Formular
  • Größe Anpassen: Ja
  • Automatisch zentrieren: Ja
  • Rahmenart: Dialog
  • Mit Systemmenufeld: Nein
  • MinMaxSchaltflächen: Keine
  • Schließenschaltfläche: Nein
  • Popup: Ja
  • Kontextmenu: Nein

Als fünftes wird in den Starteigenschaften von Access das soeben mit dem Übersichts-Manager erstellte Übersichtsformular als Startformular eingesetzt. Über EXTRAS / START ... "Formular/Seite anzeigen:" kann das Übersichtsformular ausgewählt werden.

Als sechstes wird über die Starteigenschaften das Datenbankfenster ausgeblendet. Dazu wählt man EXTRAS / START ... und deaktiviert das Häkchen vor "Datenbankfenster anzeigen".

Durch dieses Vorgehen wird erreicht, das direkt nach dem Start der Datenbankanwendung unser Übersichtsformular geladen wird. Von diesem aus kann sich der User durch die Anwendung navigieren. Dadurch, dass alle Formulare als Popup-Formulare gestaltet sind, fällt es dem User schwer, andere als die gewünschten Aktionen auszuführen.

Fazit: Mit der hier vorgestellten Benutzerführung durch Popup-Formulare wird der User konsequent durch die Anwendung geführt. Andere Datenbankobjekte sind für ihn scheinbar nicht auswählbar. Es gibt jedoch noch einige Schwächen, mit denen sich der User Zugriff auf die Datenbankobjekte verschaffen kann. Hierauf wird in den folgenden Abschnitten eingegangen.

Zurück zur Übersicht

 

6. Menüleisten in Berichten

Auch die Berichte müssen so verändert werden, dass der User keinen Zugriff auf die Datenbankobjekte hat. Ansonsten wäre es möglich, wenn in der Anwendung ein Bericht in der Seitenvorschau geöffnet wird, von hieraus über Menü- und Symbolleisten auf Funktionen zuzugreifen, die nicht gewünscht sind. Insgesamt sind folgende drei Schritte zu bewerkstelligen:

Als erstes wird bei jedem Bericht beim Ereignis "Beim Öffnen" folgender Code eingegeben:
   Forms!frmAufrufendesFormular.Visible=False

Als zweites wird bei jedem Bericht beim Ereignis "Beim Schließen" folgender Code eingegeben:
   Forms!frmAufrufendesFormular.Visibile=True

Als drittes müssen jeweils eine Menüleiste, eine Symbolleiste und eine Kontextmenüleiste definiert werden. In diesen sollten nur die für den Anwender notwendigen Funktionen enthalten sein wie z.B. Drucken, Seite einrichten und Zoomen.
Jedem Bericht werden in den Eigenschaften diese drei Leisten zugewiesen.

Fazit: Durch dieses Vorgehen wird erreicht, dass der Nutzer aus der Seitenansicht eines Berichtes heraus keinen Zugriff mehr auf andere Datenbankobjekte oder Funktionen hat.

Zurück zur Übersicht

 

7. Starteigenschaften von Access

Durch das Setzen der Starteigenschaften kann eine Datenbankanwendung noch weiter gesichert werden. Die Starteigenschaften können unter EXTRAS / START ... aufgerufen werden. Anzumerken ist, dass alle im folgenden beschriebenen Änderungen erst nach dem nächsten Start der Datenbank wirksam werden. Es können folgende Einschränkungen eingesetzt werden:

Datenbankfenster anzeigen
Wenn das Häkchen vor Datenbankfenster anzeigen entfernt wurde, wird das Datenbankfenster standardmäßig nicht mehr angezeigt.

Unbeschränkte Menüs anzeigen
Wenn dieses Häkchen entfernt wurde, werden viele Menüs nur noch in eingeschränktem Rahmen angezeigt. Viele Funktionen zur Veränderung von Datenbankobjekten stehen dann nicht mehr direkt zur Verfügung.

Eingebaute Symbolleisten zulassen
Wenn diese Option deaktiviert wurde, sind auch die Symbolleisten nur noch in eingeschränktem Rahmen verfügbar.

Standard-Kontextmenüs zulassen
Damit beim Klicken mit der rechten Maustaste kein Kontextmenü mehr erscheint, wird diese Option deaktiviert.

Symbolleisten- und Menüänderungen zulassen
Diese Option wird deaktiviert, damit die zuvor eingeschränktem Symbol- und Menüleisten nicht vom Anwender geändert werden können. Damit bleibt sichergestellt, dass auf die nicht mehr dargestellten Funktionen wirklich nicht mehr zugegriffen werden kann.

Codeansicht nach Fehler zulassen
Diese Option wird deaktiviert, damit nach einem Fehler im VBA-Code nicht das Codefenster geöffnet wird und sich dem Anwender der Quelltext ungeschützt offenbart.

Access-Spezialtasten verwenden
Durch Deaktivierung dieser Option werden die in Access eingebauten speziellen Shortcuts abgeschaltet. Ansonsten könnte man durch einfaches Drücken der F11-Taste jederzeit das Datenbankfenster anzeigen.

Achtung: Durch das Festhalten der Shift-Taste beim Start einer Datenbank werden die Starteigenschaften einer Datenbank umgangen.

Fazit: Durch das gezielte Setzen der Starteigenschaften kann der ungewünschte Zugriff auf eine Datenbankanwendung weiter beschränkt werden. Diese Einstellungen lassen sich jedoch umgehen.

Zurück zur Übersicht

 

8. "Abschalten" der Shift-Taste

Wie im Abschnitt 7 dargestellt, können die Starteigenschaften von Access durch das Festhalten der Shift-Taste beim Start der Datenbank umgangen werden. Dies ist auf der einen Seite für den Entwickler ganz hilfreich. Auf der anderen Seite kann aber auch der User sich dieses Verfahrens bedienen.

Die Funktion der Shift-Taste kann per Programm geändert werden. Dazu wird der folgende Code in ein Modul geschrieben und zur Ausführung gebracht. Nach dem nächsten Start ist dann die Funktion der Shift-Taste ausgeschaltet.
 

   On Error GoTo Err_ShiftTasteAus

   Dim db As DAO.Database

   Set db = CurrentDb
   db.Properties!AllowBypassKey = False

   Exit_ShiftTasteAus:
      On Error Resume Next
      db.Close
      Set db = Nothing
      Exit Function

   Err_ShiftTasteAus:
      Select Case Err
         Case 0
            Resume Next
         Case 3270
            db.Properties.Append db.CreateProperty("AllowBypassKey", dbBoolean, False)
            Resume Next
         Case Else
            MsgBox (Err.Number & vbCrLf & Err.Description)
            Resume Exit_ShiftTasteAus
         End Select

Was aber, wenn man selber nochmals etwas an der Datenbank ändern möchte? Hier bietet sich folgendes Vorgehen an:

  • Man erstellt ein Startformular.
  • Dieses bindet man über die Starteigenschaften ein (siehe oben).
  • Auf diesem Formular wird an einer nicht benutzten Stelle ein Rechteck platziert.
  • Die Rahmenart wird aus transparent gestellt.
  • Die Hintergrundfarbe wird auf die Hintergrundfarbe des Formulars eingestellt.
  • Dieses so erstellte Rechtseck ist für den Benutzer nicht sichtbar.
  • Diesem Rechteck gibt man beim Ereignis "Beim Doppelklicken" eine Funktion zum An- und Ausschalten der Shift-Taste.
  • Die Ausführung der Funktion sollte an die Eingabe eines Passwortes geknüpft sein.

Auf diese Art und Weise wird eine Möglichkeit für den Programmierer geschaffen, sich Zugang zu den Datenbankobjekten zu verschaffen, um Änderungen an der Datenbank vorzunehmen. Der normale User hat diese Möglichkeit nicht. Erst einmal müsste er zufällig das nicht sichtbare Rechteck finden. Dann müsste er zufällig Doppelklicken und dann müsste er noch das richtige Passwort kennen.

Eine Beispieldatenbank, die das genannte Vorgehen beinhaltet, gibt's hier zum Download.

Fazit: Die Starteigenschaften einer Datenbank können mit der Shift-Taste umgangen werden. Dieses Verhalten kann per Code abgeschaltet werden. Das Vorgehen ist zwar etwas aufwendig - aber es lohnt sich.

Zurück zur Übersicht

 

9. Das Sicherheitssystem von Access

Einen wirklich professionellen Schutz einer Datenbank kann man mit dem Sicherheitssystem von Access realisieren. Dabei werden den jeweiligen Benutzern Berechtigungen zugewiesen. Wem diese Berechtigungen fehlen, der kann die gewünschte Aktion nicht ausführen.

Um eine Datenbank in ein gesichertes System zu verwandeln sind folgende Schritte durchzuführen:

  1. Erstellen Sie mit dem Microsoft-Access-Arbeitsgruppen-Administrator (wrkgadm.exe) eine neue Arbeitsgruppendatei.

  2. Starten Sie Access ohne eine Datenbank zu öffnen.

  3. Rufen Sie das Dialogfeld "Benutzer- und Gruppenkonten" über den Befehl "Extras / Zugriffsrechte / Benutzer- und Gruppenkonten" auf. Vereinbaren Sie ein Kennwort für den Benutzer "Administrator".

  4. Erstellen Sie einen neuen Benutzer, und legen Sie ihn als Verwalter der Datenbank, als "Administrator", fest. Der Benutzer wird dazu der Arbeitsgruppe "Administratoren" zugeordnet.

  5. Verlassen Sie Access und rufen Sie das Programm erneut auf. Access zeigt nun den Anmeldedialog. Melden Sie sich unter dem Namen des neuen Administrators an. Geben Sie dabei kein Passwort an, denn bisher wurde für den neuen Benutzer kein Kennwort vereinbart.

  6. Legen Sie nun ein neues Kennwort für den Benutzer fest.

  7. Entfernen Sie den Benutzer "Administrator" aus der Gruppe "Administratoren".

  8. Starten Sie Access neu, und melden Sie sich mit Namen und Kennwort des neuen Benutzers an.

  9. Erstellen Sie eine neue, leere Datenbank. Schließen Sie die Datenbank.

  10. Verschlüsseln Sie die Datenbank ("Extras / Zugriffsrechte / Datenbank ver- /entschlüsseln").

  11. Definieren Sie neue Gruppen und Benutzer.

  12. Öffnen Sie die neue Datenbank. Richten Sie die Standardberechtigungen ein, die allen neuen Objekten zugewiesen werden sollen.

  13. Importieren Sie dann alle Objekte der zu schützenden Datenbank.

Weiterführende Informationen zum Sicherheitssystem finden Sie in der Access-Hilfe, in diversen Büchern und beim AccessProfiPool im Whitepaper von Bernd Gilles.

Fazit: Die Umwandlung von Access in ein gesichertes System ist keine triviale Aufgabe. Der Aufwand lohnt sich jedoch, da damit Berechtigungen auf Benutzerebene vergeben werden können.

Zurück zur Übersicht

 

10. Zusammenfassung

Es gibt verschiedene Arten, eine Datenbank zu schützen. Der jeweilige Schutz wirkt dabei unterschiedlich.

Es gibt einfache Maßnahmen, die nur dazu dienen können, einen unbedarften Anwender davon abzuhalten, seine Neugier zu befriedigen. Es gibt aber auch komplexe Maßnahmen, die auch erfahrene Anwender einen Einblick in die Datenbank verwehren. Eine Kombination aller vorgestellten Maßnahmen ist derzeit beim Autor im Einsatz und hat sich bewährt.

Fazit: Die vorgestellten Punkte können beliebig miteinander kombiniert werden. Bei der Konzeption eines Sicherheitskonzeptes kommt es darauf an, welcher Aufwand betrieben werden soll und wie wichtig der Schutz aus Sicht des Programmierers ist.

Zurück zur Übersicht

 

11. Ergänzende Links

Bei Christoph Jüngling finden sich Ausführungen zum Thema Access-Sicherheit.

Von Bernd Gilles gibt es ein Whitepaper. Hier finden sich weiterführende Informationen zum Sicherheitssystem von Access.

Von Microsoft gibt es einen Workshop zum Thema Erhöhen der Sicherheit für eine Access-Datei. In diesem Artikel werden unterschiedliche Verfahren zur Implementierung von Sicherheitsebenen erläutert, um Access-Datenbanken zu schützen.

Die Security FAQ in englischer Sprache gibt es bei Microsoft. Hier wird ausführlich und umfangreich auf das Sicherheitssystem von Access eingegangen.

In redmond's inside Access findet sich in Ausgabe 5/2000 ein Artikel zum Thema Datenbanken schützen.

Microsoft MVP - Thomas Möller


02.10.2020:
TM-AbhängigeObjekte
Version 4.03 bereitgestellt.


06.11.2019:
TM VBA-Inspector:
Lösung für Installationsproblem dokumentiert.


06.05.2017:
TM-VBALineNumbers
Version 1.29.01 bereitgestellt.


27.03.2016:
TM VBA-Inspector:
Installationsroutine überarbeitet.


23.05.2014:
TM-RebuildDatabase
Version 1.75 bereitgestellt.


Powered by CMSimple - Template by CMSimple-Styles.com - Autor:Thomas Möller