Benutzerverwaltung mit verschlüsselten Kennwörtern

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten Kennwörtern umgehen. Das geht am einfachsten, wenn Sie die Kennwörter verschlüsselt speichern. Damit verringern Sie die Wahrscheinlichkeit, dass jemand die Kennwörter entschlüsselt und für seine Zwecke nutzen kann, erheblich. Dieser Artikel stellt eine kleine Benutzerverwaltung vor, mit der Sie Benutzer und Benutzergruppen verwalten und auch Berechtigungen für verschiedene Tabellen vergeben können.

Die Benutzerverwaltung

Zur Benutzerverwaltung gehören einige Tabellen, mit denen wir die Benutzer, die Benutzergruppen, die Zuordnung der Benutzer zu den Benutzergruppen, die Tabellen, für die wir Berechtigungen vergeben wollen, sowie die Berechtigungen selbst verwalten wollen.

Außerdem gehört dazu ein Formular für die Anmeldung des jeweiligen Benutzers. Dieses nimmt den Benutzernamen und das Kennwort entgegen und prüft, ob ein passendes Paar dieser beiden Daten in der Tabelle der Benutzer gefunden werden kann. In diesem Fall soll eine temporäre Variable mit dem Namen des Benutzers gefüllt werden.

Weitere Mechanismen, welche die Prüfung der Berechtigungen dieses Benutzers beim Zugriff auf die Daten durchführen, nutzen den Inhalt dieser Variablen. Diese Mechanismen stellen wir beispielsweise im Beitrag Zugriffsrechte mit Datenmakros (www.access-im-unternehmen.de/1193) vor.

Tabellen der Benutzerverwaltung

Die erste Tabelle der Benutzerverwaltung heißt tblBenutzer und dient zum Speichern der Benutzerdaten, in diesem Fall des Benutzernamens und des Kennworts. Der Entwurf dieser Tabelle sieht wie in Bild 1 aus. Für das Feld Benutzername legen wir einen eindeutigen Index fest, damit kein Benutzername zwei Mal vergeben werden kann. Außerdem fügen wir noch ein Feld namens KennwortZuletztGeaendertAm mit dem Datentyp Datum/Uhrzeit hinzu, das speichert, wann das Kennwort des Benutzers zuletzt geändert wurde.

Tabelle zur Verwaltung der Benutzer

Bild 1: Tabelle zur Verwaltung der Benutzer

Die Tabelle tblBenutzergruppen speichert die Namen der Benutzergruppen (siehe Bild 2). Das einzige Feld neben dem Primärschlüsselfeld heißt Benutzergruppe und besitzt ebenfalls einen eindeutigen Index, damit jede Benutzergruppe nur einmal angegeben werden kann.

Tabelle zur Verwaltung der Benutzergruppen

Bild 2: Tabelle zur Verwaltung der Benutzergruppen

Um die Benutzer den Benutzergruppen zuzuordnen, erstellen wir eine weitere Tabelle namens tblGruppenzuordnungen. Diese enthält neben dem Primärschlüsselfeld GruppenzuordnungID noch zwei Fremdschlüsselfelder namens BenutzerID und BenutzergruppeID. Beide Beziehungen haben wir mit dem Nachschlageassistenten eingerichtet. Damit jeder Benutzer nur einmal zu jeder Benutzergruppe zugeordnet werden kann, fügen wir der Tabelle einen zusammengesetzten, eindeutigen Index über die beiden Felder BenutzerID und BenutzergruppeID hinzu (siehe Bild 3).

Tabelle zur Zuordnung von Benutzern zu Benutzergruppen

Bild 3: Tabelle zur Zuordnung von Benutzern zu Benutzergruppen

Tabelle zum Speichern der Tabellen

Wir wollen für jede Benutzergruppe die Berechtigungen für den Zugriff auf die Tabellen der Datenbank festlegen. Dazu benötigen wir erst einmal eine Tabelle mit den Tabellen der Datenbank. Diese heißt tblTabellen und sieht im Entwurf wie in Bild 4 aus.

Tabelle zum Speichern der Tabellennamen

Bild 4: Tabelle zum Speichern der Tabellennamen

Füllen der Tabelle mit Tabellennamen

Damit das Eintragen der Tabellen nicht zu aufwendig wird, haben wir eine kleine Prozedur geschrieben, mit der Sie die Bezeichnungen der Tabellen schnell in die Tabelle tblTabellen eintragen können. Diese finden Sie in Listing 1. Die Prozedur durchläuft alle Elemente der Auflistung TableDefs des Database-Objekts für die aktuelle Datenbank. Dabei legt es jeweils einen neuen Datensatz in der Tabelle tblTabellen an und trägt die Bezeichnung der Tabelle ein. Dabei untersucht die Prozedur noch die Bezeichnung der Tabelle und trägt nur solche Tabellenbezeichnungen ein, die nicht mit MSys (Systemtabellen) oder ~ beginnen (temporäre Tabellen).

Public Sub TabellenEintragen()
     Dim db As DAO.Database
     Dim tdf As DAO.TableDef
     Set db = CurrentDb
     For Each tdf In db.TableDefs
         If Not tdf.Name Like "MSys*" And Not tdf.Name Like "~*" Then
             On Error Resume Next
             db.Execute "INSERT INTO tblTabellen(Tabelle) VALUES(''" & tdf.Name & "'')", dbFailOnError
             On Error GoTo 0
         End If
     Next tdf
End Sub

Listing 1: Prozedur zum Eintragen der Tabellennamen

Tabelle der Berechtigungen

Die Tabelle tblBerechtigungen soll festlegen, welche Berechtigungen für die Kombinationen aus Benutzergruppen und Tabellen festgelegt werden können. Dabei haben wir für diese Tabelle ausnahmsweise einmal kein Primärschlüsselfeld mit dem Datentyp Autowert definiert, sondern eines mit dem Datentyp Zahl. Auf diese Weise können wir die Werte für das Primärschlüsselfeld selbst vergeben. Das zweite Feld heißt Berechtigung und soll die Bezeichnung der Berechtigung enthalten (siehe Bild 5). Auch für dieses Feld haben wir wieder einen eindeutigen Index festgelegt.

Tabelle zum Speichern der Berechtigungen

Bild 5: Tabelle zum Speichern der Berechtigungen

Werte der Tabelle tblBerechtigungen

Warum aber wollen wir für das Primärschlüsselfeld dieser Tabelle nicht die Autowert-Funktion verwenden? Weil wir die Werte für das Primärschlüsselfeld selbst vergeben wollen. Diese sollen nämlich wie in Bild 6 aussehen. Die Berechtigung Keine erhält beispielsweise den Wert 0. Lesen erhält den Wert 1, Anlegen den Wert 2, Ändern den Wert 4 und Löschen den Wert 8.

Werte der Berechtigungen

Bild 6: Werte der Berechtigungen

Das Muster ist leicht zu erkennen: Die Werte entsprechen allesamt Zweierpotenzen. Warum das? Weil die Berechtigungen kombinierbar sein sollen und wir die Kombinationen in einem einzigen Wert erfassen wollen. Wenn wir nur Zweierpotenzen für diese Werte verwenden, können wir durch Summieren der Werte einzelne Berechtigungen zusammenfassen.

Der Wert 1 würde bedeuten, dass der Benutzer nur lesende Rechte an der Tabelle hat. Der Wert 5 (aus 1 + 4) heißt, der Benutzer hat Leserechte und darf die Datensätze ändern. Der Wert 15 (aus 1 + 2 + 4 + 8) bedeutet, dass der Benutzer alle Rechte an den Datensätzen der Tabelle hat. Wir schauen uns später im Detail an, wie wir diese Werte nutzen können.

Alternative: Alle Kombinationen?

Die Alternative hierzu wäre, gleich alle Kombinationen in der Tabelle zu speichern, also etwa noch Einträge hinzuzufügen wie Lesen und Anlegen, Lesen und Ändern, Lesen und Löschen bis hinzu zu Lesen, Anlegen, Bearbeiten und Löschen. Dann wäre nur die Auswahl eines Eintrags für die Ermittlung aller Berechtigungen nötig. Allerdings müsste man dann auch immer, wenn man nur wissen will, ob der Benutzer einer Benutzergruppe etwa Löschrechte besitzt, den Zahlenwert interpretieren. Also fahren wir mit der Variante, bei der wir die einzelnen Rechte explizit und einzeln setzen müssen.

Tabellen zum Zuordnen der Berechtigungen

Fehlt noch eine Tabelle, mit der wir die verschiedenen Berechtigungen für die Kombination aus Benutzergruppe und Tabelle festlegen.

Die Tabelle heißt tblBerechtigungszuordnungen und sieht in der Entwurfsansicht wie in Bild 7 aus. Diese Tabelle hat gleich drei Fremdschlüsselfelder, mit denen die Datensätze der Tabellen tblBenutzergruppen, tblTabellen und tblBerechtigungen kombiniert werden. Damit auch hier jede Kombination nur einmal vorkommt, haben wir einen zusammengesetzten, eindeutigen Index für die drei Felder BenutzergruppeID, TabelleID und BerechtigungID angelegt.

Tabelle zur Zuordnung der Berechtigungen

Bild 7: Tabelle zur Zuordnung der Berechtigungen

Benutzer verwalten

Für die Verwaltung der Benutzer und die Zuordnung zu den Benutzergruppen legen wir ein Formular an, dass an die Tabelle tblBenutzer gebunden ist. Zwei Listenfelder namens lstZugewiesen und lstNichtZugewiesen dienen der Zuweisung der Benutzergruppen zu den Benutzern (siehe Bild 8).

Formular zum Verwalten der Benutzer

Bild 8: Formular zum Verwalten der Benutzer

Das erste Listenfeld zeigt alle Einträge der Tabelle tblBenutzergruppen an, die mit dem aktuell im Formular angezeigten Benutzer verknüpft sind. Dazu legen wir für das Listenfeld die Abfrage mit dem Entwurf aus Bild 9 als Datensatzherkunft fest. Diese liefert alle Einträge der Tabelle tblBenutzergruppen, die über die Tabelle tblGruppenzuordnungen dem aktuellen Benutzer aus dem Formular zugeordnet sind.

Datensatzherkunft des Listenfeldes lstZugewiesen

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar