Alte Access-DB? Dann ist meist alles offen

Viele Access-Datenbanken laufen seit Jahren einfach weiter.
Ohne Passwort. Ohne Rollen. Ohne Logging.
Für mich ist das ein Risiko.
Ich zeig Dir, wie ich solche Altlasten absichere – pragmatisch und ohne Overhead.

Schritt 1: Backend/Frontend trennen (wenn noch nicht passiert)

Der Klassiker: alles in einer Datei.
Das musst Du ändern.
Nur das Backend mit den Tabellen kommt ins Netzwerk.
Frontend mit Formularen und Code bleibt lokal.

' Beispiel: Backend-Pfad prüfen
If Dir("\\server\access\backend.accdb") = "" Then
  MsgBox "Backend nicht gefunden!", vbCritical
  Application.Quit
End If

Schritt 2: Schreibrechte im Dateisystem einschränken

Nur das Backend muss beschreibbar sein.
Frontend am besten schreibgeschützt oder readonly im Netzlaufwerk.
Verhindert ungewollte Code-Änderungen durch andere.

OrdnerGruppeRechte
\server\accessBenutzerLesen/Schreiben
\server\frontendBenutzerNur Lesen

Schritt 3: Navigation & Tasten deaktivieren

Keine Alt+F11. Kein Direktfenster. Kein Zugriff auf die Tabellenstruktur.

' Beim Start setzen
DoCmd.ShowToolbar "Database", acToolbarNo
Application.SetOption "Show Navigation Pane", False

In den Optionen:

  • Navigationsbereich ausblenden
  • Sondertasten deaktivieren
  • Vollbildmodus aktivieren

Schritt 4: Tabellen ausblenden & sperren

Nutzer sollen keine Tabellen direkt öffnen.
Ich setze alle relevanten Tabellen auf „Versteckt“:

Sub TabellenVerstecken()
  Dim tdf As DAO.TableDef
  For Each tdf In CurrentDb.TableDefs
    If Left(tdf.Name, "MSys") = False Then
      tdf.Attributes = tdf.Attributes Or dbHiddenObject
    End If
  Next
End Sub

Nur das Frontend kennt die Verknüpfung – der User nicht.

Schritt 5: Startformular prüfen, ob der richtige Benutzer angemeldet ist

Ein einfacher Schutz: Windows-User prüfen.

Sub PrüfeZugriff()
  Dim user As String
  user = Environ("USERNAME")

  If user <> "m.schmidt" And user <> "t.meier" Then
    MsgBox "Zugriff verweigert", vbCritical
    Application.Quit
  End If
End Sub

Oder: Rollen in Tabelle pflegen und dynamisch prüfen.

Schritt 6: Code-Editor sperren (VBA-Projekt mit Passwort)

VBE-Projekt mit Passwort versehen.
Nicht bombensicher – aber ein Hindernis.

  • Alt+F11 → Extras → Eigenschaften → Schutz → Häkchen setzen + Passwort
  • Speichern, schließen, neu öffnen

Schritt 7: Logging bei sensiblen Aktionen

Ich logge Zugriffe auf bestimmte Formulare und Änderungen in Schlüsseltabellen.

Sub LogZugriff(frm As String)
  Dim sSQL As String
  sSQL = "INSERT INTO tblLog (Benutzer, Formular, Zeit) VALUES " & _
         "('" & Environ("USERNAME") & "', '" & frm & "', Now())"
  CurrentDb.Execute sSQL, dbFailOnError
End Sub

Aufruf z. B. in Form_Open:

Private Sub Form_Open(Cancel As Integer)
  Call LogZugriff(Me.Name)
End Sub

Schritt 8: Makros und Autoexec prüfen

Viele alte Datenbanken enthalten Makros mit unsauberem Code.
Ich ersetze sie durch saubere VBA-Routinen.
Und prüfe, ob beim Start unerwünschte Aktionen laufen.

Schritt 9: Datensicherung automatisieren

Auch Sicherheit: regelmäßig Backups erstellen.

Sub BackupErstellen()
  Dim pfad As String
  pfad = CurrentProject.Path & "\Backup_" & Format(Now, "yyyymmdd_hhnnss") & ".accdb"
  FileCopy CurrentDb.Name, pfad
End Sub

Am besten wöchentlich per Windows-Aufgabenplanung oder beim Schließen.

Schritt 10: Optional: Migration Backend auf SQL Server

Wenn Daten besonders sensibel sind → SQL Server verwenden.
Dann greift Rollen- und Rechtemanagement auf Datenbankebene.

-- Beispiel: Nur SELECT für Rolle "reportuser"
GRANT SELECT ON dbo.Kunden TO reportuser;
DENY INSERT ON dbo.Kunden TO reportuser;

Frontend bleibt Access – aber Daten sind auf dem Server geschützt.

Mein Fazit

Access ist kein Sicherheitsrisiko – wenn Du es ernst meinst.
Ich sichere jede Alt-DB ab wie eine kleine Webanwendung.
Nicht mit Panzertür, aber mit gesundem Menschenverstand.

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert