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:
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