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

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access im Unternehmen:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 1.000 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar