Benutzer mit Access verwalten

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

André Minhorst, Duisburg

Das Sicherheitssystem von Access bietet die Möglichkeit, Benutzer und Benutzergruppen zu verwalten und deren Berechtigungen an den einzelnen Objekten der Access-Datenbank festzulegen. Die Verwaltung der Berechtigungen erfolgt in zwei Dialogen, die über die Menüleiste geöffnet werden können. Leider haben diese Dialoge Nachteile – sie stehen z. B. in der Runtime-Version nicht zur Verfügung und sind nicht anpassbar. Im folgenden Beitrag erfahren Sie, wie Sie dem Anwender eine maßgeschneiderte und immer verfügbare Benutzerverwaltung zur Verfügung stellen.

Die Verwaltung der Berechtigungen von Benutzern und Benutzergruppen verläuft im optimalen Fall so, dass bei der Erstellung der Anwendung bereits alle Benutzergruppen und deren Berechtigungen feststehen. Außerdem sollte die Vergabe der Berechtigungen ausschließlich auf Gruppenebene erfolgen, niemals auf Benutzerebene.

Unter diesen Voraussetzungen müssen nach der Inbetriebnahme der Anwendung nur noch gelegentlich Benutzer hinzugefügt oder entfernt und deren Gruppenzugehörigkeiten angepasst werden.

Wenn die Datenbankanwendung diese Funktionalität unabhängig von der Art der Weitergabe (als herkömmliche Datenbank oder als Runtime-Version) aufweisen soll, müssen Sie das entsprechende Werkzeug selbst bereitstellen. Im Gegensatz zu den Dialogen zur Verwaltung von Benutzern und Gruppen sind die entsprechenden VBA-Anweisungen immer verfügbar. Mit Hilfe eines Formulars zur Verwaltung von Benutzern und Gruppen können Sie dem Anwender außerdem ein für dessen Bedürfnisse maßgeschneidertes Werkzeug zur Verfügung stellen.

Im vorliegenden Beitrag erfahren Sie, wie Sie ein solches Formular erstellen und welche Techniken zum codegesteuerten Verwalten einer Datenbank benötigt werden.

Als Beispieldatenbank bietet sich die Stundenzetteldatenbank aus der Ausgabe 4/2002 von Access im Unternehmen an. Die Stundenzetteldatenbank verfügt bereits über ein aktiviertes Sicherheitssystem mit verschiedenen Benutzergruppen und entsprechenden Berechtigungen. Sie können die hier beschriebenen Formulare und Module in dieser Datenbank anlegen und anwenden.

Hinweis

Wenn Ihnen die Anwendung des Sicherheitssystems nicht geläufig ist, können Sie die Beiträge Skalierbare Datensicherheit mit Access und Stundenzetteldatenbank zur Dokumentation von Arbeitsleistungen aus Heft 4/2002 als Grundlage für die Lektüre des vorliegenden Beitrags verwenden.

Exkludieren der Berechtigungsverwaltung

Einige Formulare und Funktionen können theoretisch auch unverändert in anderen Datenbankanwendungen zum Einsatz kommen. Dazu können Sie entweder die benötigten Datenbankobjekte in die Zieldatenbank exportieren oder Sie platzieren sie in einer eigenen Datenbank und greifen per Referenz auf die dort vorhandenen Funktionen zu.

Im Beitrag Referenzen und Bibliotheken der vorliegenden Ausgabe erfahren Sie, wie Sie die Funktionen einer solchen Datenbank in andere Datenbanken einbinden und dort zur Verfügung stellen können.

Hinweis

Sie finden die Beispieldatenbanken zum vorliegenden Beitrag unter den Namen Berechtigungen97.mdb und Berechtigungen2000.mdb auf der beiliegenden Heft-CD.

Zur Verwaltung von Benutzern und Benutzergruppen in einem neu erstellten Formular ist der Einsatz von VBA unumgänglich. Daher lernen Sie in den folgenden Abschnitten zunächst einiges über die berechtigungsspezifische Seite des Objektmodells von Access.

Das DBEngine-Objekt

Das Hauptobjekt der DAO-Bibliothek ist das Objekt DBEngine. Alle weiteren Objekte dieser Bibliothek sind diesem Objekt untergeordnet.

Die Workspaces-Auflistung und das Workspaces-Objekt

Die Workspaces-Auflistung ist dem DBEngine-Objekt untergeordnet und enthält alle Workspaces.

Das Workspace-Objekt dient zur Verwaltung einer Sitzung mit Access. Eine Sitzung wird durch die Anmeldung an die Jet-Engine gestartet und endet mit der Abmeldung. Das bedeutet unter Access 97, dass die Sitzung mit dem Starten von Access beginnt, während die Sitzung unter Access 2000 erst mit dem öffnen einer Datenbank startet.

Hinweis

Auch wenn Sie sich nicht bewusst bei einer Datenbank anmelden, befinden Sie sich zu jeder Zeit während der Arbeit mit einer Access-Datenbank in einer Sitzung. Bei der Anwendung von nicht geschützten Datenbanken erfolgt die Anmeldung nämlich automatisch mit dem Benutzernamen Admin, der in jeder Arbeitsgruppendatei enthalten ist. Als nicht geschützt gilt eine Datenbank in diesem Falle, wenn für den Benutzer Admin kein Passwort vergeben wurde.

Wenn Sie innerhalb einer Access-Sitzung Informationen über Benutzer, Benutzergruppen etc. verwenden möchten, erstellen Sie einfach eine Referenz auf das Workspace-Objekt der aktuellen Sitzung und greifen über entsprechende Auflistungen auf die gewünschten Informationen zu. Zur Referenzierung des Workspace-Objektes müssen Sie lediglich eine entsprechende Objektvariable deklarieren und anschließend initialisieren:

Dim wrk As Workspace
Set wrk = DBEngine.Workspaces(0)

Der Eintrag der Workspaces-Auflistung mit dem Index 0 entspricht immer der aktuellen Sitzung. Wenn Sie auf eine andere Sitzung zugreifen möchten, müssen Sie das über den Namen der Sitzung erledigen.

Die Auflistungen Groups und Users

Nachdem Sie das Workspace-Objekt festgelegt haben, können Sie leicht auf die Auflistungen Groups und Users zugreifen, um die Benutzergruppen und Benutzer der aktuellen Sitzung anzuzeigen.

Gruppen auflisten

Die Prozedur aus Quellcode 1 listet alle Namen der in der aktuellen Sitzung verwendeten Arbeitsgruppe vorhandenen Gruppen auf:

Die Prozedur durchläuft alle Einträge der Groups-Auflistung und gibt den jeweiligen Namen im Testfenster aus. Gehen Sie folgendermaßen vor, um die Prozedur auszuprobieren:

  • Klicken Sie auf der Registerseite Module des Datenbankfensters auf die Schaltfläche Neu.
  • Geben Sie die Prozedur aus Quellcode 1 im nun erscheinenden VBA-Editor ein.
  • Aktivieren Sie mit der Tastenkombination Strg + G das Testfenster, um die Prozedur auszuprobieren.
  • Geben Sie dort den Prozedurnamen ein und schließen Sie die Eingabe mit der Eingabetaste ab. (
  • Public Sub GruppenAnzeigen()
        Dim wrk As Workspace
        Dim grp As Group
        Set wrk = DBEngine.Workspaces(0)
        For Each grp In wrk.Groups
            Debug.Print grp.Name
        Next grp
    End Sub

    Quellcode 1

    Bild 1: Auflistung aller Benutzergruppen im Testfenster

    Bild 2: Ausgabe von Benutzern und deren Gruppen

    Die Prozedur erzeugt für die Beispieldatenbank Stundenzettelverwaltung die Ausgabe aus Bild 1.

    Benutzer auflisten

    Die Prozedur zur Auflistung aller Benutzer der in der aktuellen Sitzung verwendeten Arbeitsgruppe hat einen ähnlichen Aufbau:

    Public Sub BenutzerAnzeigen()
        Dim wrk As Workspace
        Dim usr As user
        Set wrk = DBEngine.Workspaces(0)
        For Each usr In wrk.Users
            Debug.Print usr.Name
        Next usr
    End Sub

    Abhängigkeiten zwischenBenutzer und Gruppe

    Zur Ermittlung der Benutzer einer Gruppe bzw. der Gruppen eines Benutzers können Sie ebenfalls Auflistungen verwenden. Das folgende Beispiel ist eine Modifikation der Prozedur BenutzerAnzeigen. Sie ist um eine For Next-Schleife zur Anzeige aller Gruppen des aktuellen Benutzers erweitert worden:

    Public Sub BenutzerUndGruppenAnzeigen()
        Dim wrk As Workspace
        Set wrk = DBEngine.Workspaces(0)
        Dim usr As user
        Dim i As Integer
        For Each usr In wrk.Users
            Debug.Print usr.Name
            For i = 0 To usr.Groups.Count - 1
                Debug.Print "  " _                & usr.Groups(i).Name
            Next i
        Next usr
    End Sub

    Bild 2 zeigt das Ergebnis der Prozedur BenutzerUndGruppenAnzeigen.

    Hinweis

    Die Anzeige der Gruppen und der dazugehörenden Benutzer erfolgt analog.

    Mit den soeben beschriebenen Funktionen sind Sie bereits in der Lage, ein Formular zur Anzeige von Benutzern, Gruppen und deren Abhängigkeiten anzuzeigen.

    Public Function BenutzerHinzufuegen(Benutzername As _    String, PID As String, Passwort As String)
        On Error GoTo BenutzerHinzufuegen_Err
        Dim wrk As Workspace
        Dim usr As user
        Set wrk = DBEngine.Workspaces(0)
        Set usr = wrk.CreateUser(Benutzername, PID, _        Passwort)
        wrk.Users.Append usr
        BenutzerHinzufuegen = True
        Exit Function
    BenutzerHinzufuegen_Err:
        If Err.Number = 3390 Then
            MsgBox "Der Benutzer mit dem Benutzernamen ''" _            & Benutzername & "'' ist bereits vorhanden."
        End If
        BenutzerHinzufuegen = False
    End Function

    Quellcode 2

    Public Function GruppeHinzufuegen(Gruppenname As _    String, PID As String)
        On Error GoTo GruppeHinzufuegen_Err
        Dim wrk As Workspace
        Dim grp As Group
        Set wrk = DBEngine.Workspaces(0)
        Set grp = wrk.CreateGroup(Gruppenname, PID)
        wrk.Groups.Append grp
        GruppeHinzufuegen = True
        Exit Function
    GruppeHinzufuegen_Err:
        If Err.Number = 3390 Then
            MsgBox "Die Datenbank enthält bereits eine " _            & "Gruppe mit der Bezeichnung ''" _            & Gruppenname & "''."
        End If
        GruppeHinzufuegen = False
    End Function

    Quellcode 3

    Zur Verwaltung dieser Objekte fehlen nun noch die Möglichkeiten, Benutzer und Gruppen anzulegen, zu löschen und Benutzer und Gruppen einander zuzuordnen.

    Benutzer und Gruppen anlegen

    Das Anlegen von Benutzern und Gruppen erfolgt für beide Auflistungen ähnlich.

    Benutzer anlegen

    Für das Anlegen eines neuen Benutzers sind neben den üblichen Anweisungen zur Deklaration und zur Initialisierung der Variablen zwei Befehle erforderlich.

    Die Methode CreateUser des Workspace-Objekts hat drei Parameter: Benutzernamen, PID und Kennwort. Mit ihr erstellen Sie zunächst ein neues Benutzerobjekt, das Sie anschließend mit der Methode Append der Auflistung Users hinzufügen.

    Die Funktion aus Quellcode 2 enthält neben diesen Anweisungen noch eine rudimentäre Fehlerbehandlung, die eine entsprechende Meldung ausgibt, wenn der anzulegende Benutzer bereits vorhanden ist.

    Gruppen anlegen

    Das Anlegen einer neuen Gruppe erfolgt ebenfalls durch die Verwendung zweier Methoden des Workspace-Objektes:

    Nach dem Erstellen der Gruppe mit der Methode CreateGroup wird diese mit der Methode Append zur Auflistung Groups hinzugefügt. Die Methode CreateGroup benötigt die übergabe zweier Argumente: Gruppenname und PID.

    Die Funktion aus Quellcode 3 beinhaltet die zum Hinzufügen einer Gruppe benötigten Befehle sowie eine entsprechende Fehlerbehandlung, die sich beim Versuch, eine bereits bestehende Gruppe hinzuzufügen, meldet.

    Public Function BenutzerLoeschen _    (Benutzername As String)
        On Error GoTo BenutzerLoeschen_Err
        Dim wrk As Workspace
        Set wrk = DBEngine.Workspaces(0)
        wrk.Users.Delete Benutzername
        BenutzerLoeschen = True
        Exit Function
    BenutzerLoeschen_Err:
        BenutzerLoeschen = False
    End Function

    Quellcode 4

    Public Function _    BenutzerZuGruppeHinzufuegen _    (Benutzer As String, Gruppe As _    String)
        On Error GoTo BenutzerZuGruppeHinzufuegen_Err
        Dim wrk As Workspace
        Dim usr As user
        Dim grp As Group
        Set wrk = DBEngine.Workspaces(0)
        Set usr = wrk.Users(Benutzer)
        Set grp = usr.CreateGroup(Gruppe)
        usr.Groups.Append grp
        usr.Groups.Refresh
        BenutzerZuGruppeHinzufuegen = True
        Exit Function
    BenutzerZuGruppeHinzufuegen_Err:
        BenutzerZuGruppeHinzufuegen = False
    End Function

    Quellcode 5

    Hinweis

    In dem Formular zur Verwaltung von Benutzern und Gruppen, das Sie später kennen lernen werden, befindet sich keine Funktion zum Anlegen oder Löschen von Benutzergruppen. Die benötigten Benutzergruppen und deren Berechtigungen sollten nach der Erstellung der Anwendung weitgehend feststehen und sollten im Normalfall nicht regelmäßigen änderungen unterliegen.

    Benutzer und Gruppen löschen

    Selbstverständlich können Sie die mit den bereits vorgestellten Funktionen angelegten Benutzer und Gruppen auch wieder löschen.

    Benutzer löschen

    Das Löschen eines Benutzers erfolgt über die Methode Delete der Auflistung Users. Einziger Parameter der Methode ist der Benutzername.

    Die Funktion BenutzerLoeschen beinhaltet alle benötigten Anweisungen zum Löschen eines Benutzers und gibt nach erfolgtem Löschen den Wert True zurück (s. Quellcode 4).

    Gruppen löschen

    Das Löschen einer Gruppe erfolgt analog zum Löschen eines Benutzers. Die einzigen Unterschiede sind die Verwendung der Groups- statt der Users-Auflistung und des Gruppen- statt des Benutzernamens.

    Hinweis

    Den Quellcode zur entsprechenden Funktion GruppeLoeschen finden Sie in der Beispieldatenbank.

    Benutzer zu Gruppe hinzufügen

    Das Hinzufügen eines Benutzers zu einer Gruppe kann auf zwei Wegen erfolgen. Entweder Sie fügen den Benutzer der Users-Auflistung der Zielgruppe hinzu oder Sie fügen die Zielgruppe der Groups-Auflistung des Benutzers hinzu.

    Da beide Methoden einen ähnlichen Ablauf haben, lernen Sie hier nur eine von beiden kennen (die andere finden Sie in der Beispieldatenbank).

    Die Funktion BenutzerZuGruppeHinzufuegen (s. Quellcode 5) hat zwei Parameter: den Namen des Benutzers und den Namen der Zielgruppe.

    Public Function BenutzerAusGruppeEntfernen(Benutzer _    As String, Gruppe As String)
        On Error GoTo BenutzerAusGruppeEntfernen_Err
        Dim wrk As Workspace
        Dim grp As Group
        Set wrk = DBEngine.Workspaces(0)
        Set grp = wrk.Groups(Gruppe)
        grp.Users.Delete Benutzer
        BenutzerAusGruppeEntfernen = True
        Exit Function
    BenutzerAusGruppeEntfernen_Err:
        BenutzerAusGruppeEntfernen = False
    End Function

    Quellcode 6

    Public Function KennwortAendern(Benutzer As String, _    AltesKennwort As String, NeuesKennwort As String) _    As Boolean
        On Error GoTo KennwortAendern_Err
        Dim wrk As Workspace
        Dim usr As user
        Set wrk = DBEngine.Workspaces(0)
        Set usr = wrk.Users(Benutzer)
        usr.NewPassword AltesKennwort, NeuesKennwort
        KennwortAendern = True
        Exit Function
    KennwortAendern_Err:
        If Err.Number = 3033 Then
            MsgBox "Das alte Kennwort ist nicht korrekt."
        End If
        KennwortAendern = False
    End Function

    Quellcode 7

    Nach dem Deklarationsteil erstellt die Funktion zunächst ein User-Objekt für den gewünschten Benutzer und ein Group-Objekt mit der Zielgruppe.

    Das Group-Objekt wird schließlich der Groups-Auflistung des Benutzers hinzugefügt.

    Benutzer aus Gruppe entfernen

    Das Entfernen eines Benutzers aus einer Gruppe erfolgt mit der Funktion aus Quellcode 6. Die Funktion hat zwei Parameter: den Namen des Benutzers und den Namen der Gruppe, aus der er entfernt werden soll.

    Kernbefehl der Funktion ist die Methode Delete der Users-Auflistung einer Gruppe. Sie löscht den angegebenen Benutzer aus der entsprechenden Gruppe.

    Kennwort ändern

    Die letzte benötigte Funktion dient zum ändern des Kennworts eines Benutzers (s. Quellcode 7). Dazu sind drei Parameter erforderlich: Der Benutzername, das alte Kennwort und das neue Kennwort.

    Die wichtigste Anweisung der Funktion beinhaltet den Aufruf der Methode NewPassword des User-Objekts. Es übergibt das alte und das neue Passwort für den zuvor per User-Objekt festgelegten Benutzer.

    Die Fehlerbehandlung reagiert mit einer Meldung, wenn das eingegebene alte Kennwort nicht stimmt.

    Für Anwender von Access-Datenbanken ist es sicher ein wenig viel verlangt, Benutzer und deren Einteilung in Gruppen über das Testfenster mit VBA-Funktionen zu verwalten.

    Daher stellen Sie ihm ein Formular mit allen dafür vorgesehenen Funktionen zur Verfügung.

    Aufbau des Formulars

    Das Formular enthält ein Register mit zwei Registerseiten. Die erste Seite zeigt jeweils einen Benutzer und die Gruppen an, denen er zugeteilt ist (siehe Bild 3). Hier können Sie Benutzer hinzufügen, löschen und deren Kennwort ändern sowie die Gruppen auswählen, denen er zugeteilt ist.

    Bild 3: Anzeige eines Benutzers und seiner Gruppen

    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