Sicherheit: Wie kann ich Benutzerberechtigungen in Access verwalten?

Access ist praktisch. Schnell. Flexibel.
Aber: Sicherheit war nie seine StÀrke.

FrĂŒher gab’s Benutzergruppen. Heute gibt’s Split-Datenbanken und VBA.
Ich zeig Dir, wie Du in modernen Access-Projekten Benutzerberechtigungen selbst verwalten kannst – robust genug fĂŒr KMU, ohne SharePoint oder Azure AD.

Grundprinzip: Trennung von Backend und Frontend

Wenn Du’s noch nicht tust: Trenn Daten (Backend, .accdb) und Anwendung (Frontend, .accde).
Nur das Frontend liegt beim Benutzer. Das Backend liegt auf dem Server – ohne Schreibrechte auf die Datei.

Frontend = logisch, Benutzersteuerung möglich
Backend = roh, nur Daten, keine Logik

Strategien zur Benutzersteuerung

Du brauchst:

  • Benutzeridentifikation
  • Rollenzuweisung
  • Zugriffssteuerung in Formularen, Buttons, Berichten

Keine Raketentechnik – aber konsequent umgesetzt spart es Ärger.

Benutzer automatisch erkennen (Windows-Anmeldung)

Public Function AktuellerBenutzername() As String
    AktuellerBenutzername = Environ("USERNAME")
End Function

Alternative ĂŒber WScript:

Public Function GetWindowsBenutzer() As String
    Dim objNet As Object
    Set objNet = CreateObject("WScript.Network")
    GetWindowsBenutzer = objNet.UserName
End Function

Ich empfehle: Speichern in einer Tabelle tblBenutzer, mit Feldern:

  • Benutzername
  • Rolle
  • Aktiv (Ja/Nein)
  • Letzter Login (fĂŒr Logging)

Login-Check beim Start

Public Sub PrĂŒfeBenutzer()
    Dim strUser As String
    strUser = AktuellerBenutzername

    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM tblBenutzer WHERE Benutzername='" & strUser & "' AND Aktiv=True")

    If rs.EOF Then
        MsgBox "Zugriff verweigert.", vbCritical
        Application.Quit
    End If

    TempVars("Rolle") = rs!Rolle
    TempVars("Benutzername") = strUser
    rs.Edit
    rs!LetzterLogin = Now
    rs.Update
    rs.Close
End Sub

Aufruf z. B. in AutoExec-Makro oder Startformular.

Zugriff steuern im Formular

Beispiel: Button nur fĂŒr Admins sichtbar

Private Sub Form_Load()
    Me.btnAdminbereich.Visible = (TempVars!Rolle = "Admin")
End Sub

Oder dynamisch fĂŒr mehrere Rollen:

Me.btnExport.Visible = (TempVars!Rolle = "Admin" Or TempVars!Rolle = "Leitung")

DatensÀtze einschrÀnken

Private Sub Form_Open(Cancel As Integer)
    If TempVars!Rolle <> "Admin" Then
        Me.Filter = "ErstelltVon='" & TempVars!Benutzername & "'"
        Me.FilterOn = True
    End If
End Sub

So sehen normale Benutzer nur ihre eigenen Daten.

Admin-OberflÀche zum Verwalten der Benutzer

Gib Dir ein Formular zur Pflege von tblBenutzer.

Und vergiss nicht:

  • Beim Löschen lieber deaktivieren (Aktiv=False)
  • Logs mitfĂŒhren: Wer hat was wann gemacht? (tblLogs)

Bonus: Access-Frontend mit Passwortschutz

Nicht narrensicher, aber nĂŒtzlich in Kombination:

Public Function PasswortCheck() As Boolean
    Dim Eingabe As String
    Eingabe = InputBox("Bitte Passwort eingeben:")

    PasswortCheck = (Eingabe = "MeinSicheresPasswort")
End Function

Oder per Benutzerpasswort aus Tabelle prĂŒfen.

Nicht militĂ€rsicher – aber besser als gar nichts.

Fazit

Access ist kein Hochsicherheits-System.
Aber Du kannst mit Bordmitteln:

  • Benutzer erkennen
  • Rollen zuweisen
  • Zugriff einschrĂ€nken
  • OberflĂ€chen dynamisch anpassen

Wichtig:
Nicht ĂŒbertreiben – aber konsequent durchziehen.
Dann reicht’s fĂŒr 95 % aller KMU-Anwendungen.

Kategorien:

Schlagwörter: