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.
Ordner | Gruppe | Rechte |
---|---|---|
\server\access | Benutzer | Lesen/Schreiben |
\server\frontend | Benutzer | Nur 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.
No responses yet