Ziel: Benutzer abfragen, Gruppen prĂŒfen, AD als Datenquelle nutzen

Access lĂ€uft bei Dir lokal – aber Deine Benutzerkonten hĂ€ngen am AD.
Du willst:

  • wissen, wer eingeloggt ist
  • prĂŒfen, ob jemand Admin ist
  • evtl. Daten aus dem AD abrufen

Das geht. Mit LDAP, ADODB und ein bisschen VBA.

Variante 1: Aktuellen Benutzer ermitteln

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

Oder gleich vollqualifiziert:

Public Function HoleDomÀnenBenutzer() As String
    HoleDomÀnenBenutzer = Environ("USERDOMAIN") & "\" & Environ("USERNAME")
End Function

Damit hast Du schon mal, wer da vor dem Rechner sitzt.

Variante 2: Benutzer aus AD abfragen (per LDAP)

Du willst wissen, ob ein Benutzer aktiv ist oder in einer bestimmten Gruppe?

Public Function HoleBenutzerAttribute(sAM As String) As String
    Dim conn As Object, cmd As Object, rs As Object
    Set conn = CreateObject("ADODB.Connection")
    Set cmd = CreateObject("ADODB.Command")

    conn.Provider = "ADsDSOObject"
    conn.Open "Active Directory Provider"

    Set cmd.ActiveConnection = conn
    cmd.CommandText = _
        "SELECT displayName, mail FROM 'LDAP://DC=deinefirma,DC=local' WHERE sAMAccountName='" & sAM & "'"

    Set rs = cmd.Execute

    If Not rs.EOF Then
        HoleBenutzerAttribute = rs.Fields("displayName") & " <" & rs.Fields("mail") & ">"
    Else
        HoleBenutzerAttribute = "Unbekannt"
    End If

    rs.Close: conn.Close
End Function

Achtung: Domainnamen im LDAP-Pfad anpassen (DC=deinefirma,DC=local).

Variante 3: Gruppenmitgliedschaft prĂŒfen

Public Function IstBenutzerInGruppe(sAM As String, gruppenname As String) As Boolean
    Dim conn As Object, cmd As Object, rs As Object
    Set conn = CreateObject("ADODB.Connection")
    Set cmd = CreateObject("ADODB.Command")

    conn.Provider = "ADsDSOObject"
    conn.Open "Active Directory Provider"
    Set cmd.ActiveConnection = conn

    cmd.CommandText = _
        "SELECT memberOf FROM 'LDAP://DC=deinefirma,DC=local' WHERE sAMAccountName='" & sAM & "'"

    Set rs = cmd.Execute

    Do Until rs.EOF
        If InStr(1, rs.Fields("memberOf"), gruppenname, vbTextCompare) > 0 Then
            IstBenutzerInGruppe = True
            Exit Function
        End If
        rs.MoveNext
    Loop

    IstBenutzerInGruppe = False
End Function

Typischer Aufruf:

If IstBenutzerInGruppe(Environ("USERNAME"), "AccessAdmins") Then
    MsgBox "Du darfst das hier."
Else
    MsgBox "Zutritt verweigert."
    DoCmd.Quit
End If

Variante 4: Alle Benutzer einer OU laden

Z. B. fĂŒr Auswahlfelder, Rechteverwaltung oder Sync

Public Sub LadeBenutzer()
    Dim conn As Object, cmd As Object, rs As Object
    Set conn = CreateObject("ADODB.Connection")
    Set cmd = CreateObject("ADODB.Command")

    conn.Provider = "ADsDSOObject"
    conn.Open "Active Directory Provider"
    Set cmd.ActiveConnection = conn

    cmd.CommandText = _
        "SELECT sAMAccountName, displayName FROM 'LDAP://OU=Mitarbeiter,DC=deinefirma,DC=local' WHERE objectClass='user'"

    Set rs = cmd.Execute

    Do While Not rs.EOF
        Debug.Print rs!displayName & " (" & rs!sAMAccountName & ")"
        rs.MoveNext
    Loop

    rs.Close: conn.Close
End Sub

Ideal fĂŒr ein Rechte-Pflegeformular oder eine User-Verwaltung in Access.

Variante 5: Login-Funktion mit GruppenprĂŒfung

Public Function LoginCheck() As Boolean
    Dim benutzer As String
    benutzer = Environ("USERNAME")

    If IstBenutzerInGruppe(benutzer, "AccessNutzer") Then
        LoginCheck = True
    Else
        MsgBox "Kein Zugriff. Wende dich an die IT.", vbCritical
        DoCmd.Quit
    End If
End Function

Aufruf z. B. beim Öffnen des Startformulars.

Best Practices

  • Gruppen zentral verwalten – nicht in Access speichern
  • Gruppen statt Einzelbenutzer prĂŒfen
  • Gruppen als „AccessMitarbeiter“, „AccessAdmin“ benennen
  • LDAP-Pfade möglichst generisch halten oder konfigurieren
  • Bei vielen Abfragen: Timeout setzen, Paging vermeiden

Einsatzszenarien

  • Rechteverwaltung
  • Protokollierung wer was getan hat
  • Benutzer-Vorauswahl in Formularen
  • Schnittstelle zu HR (wer ist aktiv, wer nicht?)
  • Reporting nach AD-Zugehörigkeit (z. B. nach Abteilung)

Fazit fĂŒr Entwickler

Access kann AD. Nicht alles – aber genug fĂŒr saubere Rollenlogik und BenutzerprĂŒfung.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

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