Verschlüsselung und Komprimieren im Backend

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Wer seine Datenbank in Front- und Backend aufteilt, möchte die im Backend befindlichen Daten möglicherweise hin und wieder komprimieren. Vielleicht sollen die Daten im Backend gar durch ein Kennwort geschützt sein, um unbefugten Zugriff ohne Frontend zu verhindern. Und andere würden gern kennwortgeschützte Backends auch noch automatisch komprimieren. Wie all dies geht, zeigt dieser Beitrag.

Eine Datenbank ist schnell in Frontend und Backend aufgeteilt. Am einfachsten geht dies mit dem Assistenten zur Datenbankaufteilung (Access 2003 und älter: Extras|Datenbank-Dienstprogramme|Assistent zur Datenbankaufteilung, Access 2007: Daten verschieben|Access-Datenbank). Versierte Anwender oder solche mit speziellen Anforderungen an die Aufteilung der Datenbank importieren die Tabellen erst in das zukünftige Backend und löschen diese aus dem Frontend, bevor Sie das Frontend mit den Tabellen im Backend verknüpfen.

Komprimieren kann man Datenbanken ganz schnell, indem man unter Access 2003 und älter den Menübefehl Extras|Datenbank-Dienstprogramme|Datenbank komprimieren und reparieren und unter Access 2007 den Office-Menü-Eintrag Verwalten|Datenbank komprimieren und reparieren aufruft (ganz früher waren die Funktionen Komprimieren und Reparieren noch separat verfügbar). Das Komprimieren sorgt im Wesentlichen dafür, dass erstellte und wieder gelöschte Daten auch endgültig aus der Datenbankdatei entfernt, sowie Indizes intern neu sortiert werden.

Eine Datenbank schützen Sie mit einem Kennwort, indem Sie unter Extras|Sicherheit|Datenbankkennwort festlegen… (Access 2003 und älter) oder Datenbanktools|Datenbanktools|Mit Kennwort verschlüsseln (Access 2007) den Dialog zum Eingeben eines Datenbankkennworts verwenden.

Backend mit Kennwort ausstatten

Kombiniert wird das schwieriger, aber nur ein wenig: Wenn Sie das Backend einer Datenbankkombination mit einem Kennwort schützen möchten, um den Inhalt seiner Tabellen vor den Augen Neugieriger zu verbergen, können Sie dies wie gewohnt erledigen.

Wenn Sie das nächste Mal vom Frontend aus auf die verknüpften Tabellen zugreifen möchten, misslingt dies allerdings. Access meldet dann ganz lapidar: Kein gültiges Kennwort. Aha, kein gültiges Kennwort. Eigentlich gab es ja gar keine Gelegenheit, eines einzugeben – zumindest keine offensichtliche. Dies fand implizit im Hintergrund statt: Wenn beim Versuch, auf eine verknüpfte Tabelle eines verschlüsselten Backends zuzugreifen, kein Kennwort übergeben wird, dann wird halt ein leeres Kennwort angenommen.

Immerhin lässt sich die Verknüpfung löschen und neu anlegen. Dann erscheint auch der Dialog aus Bild 1 und fragt das Kennwort ab. Gibt man hier die richtige Zeichenfolge ein, verknüpft Access die Tabelle ordnungsgemäß – allerdings mit einem kleinen Unterschied gegenüber der Verknüpfung mit einer Tabelle aus einem ungeschützten Backend. Den Unterschied sehen Sie, wenn Sie die Systemtabelle MSysObjects öffnen (vorher müssen Sie diese sichtbar machen, das geschieht unter Access 2003 und älter im Optionen-Dialog mit der Option Systemobjekte im Bereich Ansicht|Anzeigen, unter Access 2007 im Dialog Navigationsoptionen, den Sie über das Kontextmenü der Titelleiste des Navigationsbereichs erreichen).

pic001.png

Bild 1: Dialog beim Verknüpfen mit einer Tabelle einer anderen Datenbank

Für eine verknüpfte Tabelle aus einer kennwortgeschützten Datenbank finden Sie in der Spalte Connect einen Eintrag vor, der das Kennwort im Klartext preisgibt – keine gute Sicherung, wenn der Benutzer Vollzugriff auf das Frontend hat (siehe Bild 2). Dieser Abwehrmechanismus greift also höchstens, wenn der Benutzer nicht weiß, wo er solche Informationen findet. Davon abgesehen ist es aber auch egal: Wenn Sie ein Backend per Kennwort schützen und mit einem Frontend darauf zugreifen, kann der Benutzer darüber ja auch auf die Daten im Backend zugreifen – außer Sie verhindern den Zugriff auf das Datenbankfenster (was aber nicht Thema dieses Beitrags sein soll).

pic002.png

Bild 2: Das Kennwort des Backends wird in der Systemtabelle MSysObjects unverschlüsselt angezeigt.

Tabelle aus kennwortgeschütztem Backend wieder einbinden

Wenn Sie die Verknüpfung zu einer Tabelle aus einem kennwortgeschützten Backend aktualisieren möchten, verwenden Sie die Routine aus Listing 1. Der Unterschied zur herkömmlichen Vorgehensweise ist, dass die Connect-Zeichenfolge den zusätzlichen Parameter pwd mit dem entsprechenden Kennwort enthält.

Listing 1: Verknüpfung kennwortgeschützter Tabellen

Public Sub VerknuepfteTabellenWiedereinbinden()
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim strBackend As String
Set db = CurrentDb
strBackend = CurrentProject.Path & "\Backend.accdb"
For Each tdf In CurrentDb.TableDefs
 With tdf
    If .Connect <> "" Then
        .Connect = ";database=" & strBackend & ";pwd=ami"
        .RefreshLink
    End If
    End With
Next
End Sub

Wenn die Routine ein falsches Kennwort verwendet, löst dies Fehler 3031, Kein zulässiges Kennwort, aus.

Backend per VBA komprimieren und reparieren

Wer eine einzige Datenbank verwendet, die Benutzeroberfläche und Tabellen enthält, braucht sich um das Komprimieren keine Sorgen zu machen: Er aktiviert einfach die Option Beim Schließen komprimieren, die unter Access 2003 und älter im Bereich Allgemein des Optionen-Dialogs und unter Access 2007 in den Access-Optionen unter Aktuelle Datenbank|Anwendungsoptionen zu finden ist.

Beim Betrieb einer Frontend-/Backend-Lösung ist das schon schwieriger: Sie können zwar für beide Teile separat die Option zum automatischen Komprimieren einstellen, helfen wird dies aber nur im Frontend.

Das Backend wird nicht wie eine herkömmliche Datenbank geöffnet, sondern das Frontend greift nur per Jet auf seine Daten zu (wenn dies geschieht, erkennen Sie das an der im gleichen Verzeichnis wie die Datenbank liegenden .ldb– beziehungsweise .laccdb-Datei – diese Dateien enthalten Informationen über die Rechner und Benutzernamen der aktuell zugreifenden Instanzen).

Wer das Backend hin und wieder komprimieren muss, kann prinzipiell auf drei Arten vorgehen: Entweder per VBA vom Frontend aus, per VBScript, das durch den Taskplaner von Windows aus aufgerufen wird, oder von Hand.

Der Code für den Aufruf aus einer Access-Datenbank sieht aus wie in Listing 2. Die Routine liest zunächst aus der Systemtabelle MSysObjects den Pfad einer der verknüpften Tabellen aus und speichert diesen in der Variablen strBackend. Nach einer Prüfung, ob die ermittelte Datei überhaupt vorhanden ist, schreibt die Routine den Pfad, die Dateiendung und den Namen für eine temporäre komprimierte Version der Datenbank in entsprechende Variablen. Dann führt die Methode CompactDatabase des DBEngine-Objekts die Komprimierung aus, indem sie die komprimierte Version der Datenbank unter dem zuvor ermittelten Namen speichert.

Listing 3: Schematische Darstellung des geplanten Shutdown

Dim i As Integer
Const cIntSecondsToShutdown As Integer = 60
Private Sub Form_Timer()
    Dim strBackend As String
    Dim strBackendPfad As String
    strBackend = DLookup("Database", "MSysObjects", "Name='tblTest'")
    strBackendPfad = Mid(strBackend, 1, InStrRev(strBackend, "\"))
    If Len(Dir(strBackendpfad & "Shutdown.txt")) = 0 Then
        Me.TimerInterval = 1000
        i = i + 1
        SysCmd acSysCmdSetStatus, "Shutdown in " & cIntSecondsToShutdown - i & " Sekunden."
        If i = cIntSecondsToShutdown Then
            MsgBox "Aus!"
        End If
    End If
    End Sub

Die alte Version wird unter einem Dateinamen im Format <AlterDateiname>_Old_<yyyymmdd_hhnnss>.<Dateiendung> abgelegt und die temporär erstellte komprimierte Version erhält den alten Namen der komprimierten Datenbankdatei.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar