BEISPIEL
BEISPIEL
BEISPIEL
Kapitel 9: Fortgeschrittene Datenbankprogrammierung
Herrn Braun werden alle Rechte an der Tabelle »Gehälter« zugewiesen:
Dim DB As DATABASE
Dim D As Document
Set DB = CurrentDb
Set D = DB.Containers!Tables.Documents("Gehälter")
D.username = "Braun"
D.Permissions = D.Permissions Or dbSecFullAccess
Der Gruppe »Buchhalter« werden die Leserechte an der Tabelle »Gehälter« erteilt:
Dim DB As DATABASE
Dim D As Document
Set DB = CurrentDb
Set D = DB.Containers!Tables.Documents("Gehälter")
D.username = "Buchhalter"
D.Permissions = D.Permissions Or dbSecRetrieveData
Etwas anders sieht es aus, wenn Sie einem Nutzer oder einer Gruppe das Erstellen von Datenbanken ver-
bieten wollen. In diesem Fall wird die Information in der Systemdatenbank abgelegt.
Die Gruppe »Buchhalter« darf keine neuen Datenbanken erstellen:
Dim DB As DATABASE
Dim c As Container
Set DB = DBEngine(0).OpenDatabase(SysCmd(acSysCmdGetWorkgroupFile))
Set c = DB.Containers!Databases
c.username = "Buchhalter"
c.Permissions = c.Permissions And Not dbSecDBCreate
Für alle, die mit den logischen Operatoren noch nicht klarkommen:
Entziehen eines Rechts: Permissions = Permissions And Not <Recht>
Bewilligen eines Rechts: Permissions = Permissions Or <Recht>
Eine praktische Anleitung, die Sie Schritt für Schritt nachvollziehen können, finden Sie im folgenden
Abschnitt.
Komplettbeispiel: Nutzerbasierte Sicherheit
Sollten Sie nach all den Objekten, Properties und Optionen ein flaues Gefühl in der Magengegend ver-
spüren, geht es Ihnen nicht viel anders als den Autoren. Ein umfangreicheres Beispiel soll deshalb diese
komplexe Materie etwas leichter verdaulich gestalten.
540
HINWEIS
Ausgangspunkt ist Ihre Firmendatenbank, auf die im Wesentlichen die Nutzergruppen Buchhalter und
Pförtner
1
zugreifen sollen. Dass Ihr Pförtner nicht alles zu sehen braucht, dürfte klar sein. Neben Ihnen als
Chef bzw. Administrator sollen nur noch dem Mitarbeiter Bauer etwas tiefere Einblicke in die interne
Datenbankstruktur gestattet werden. Alle anderen Personen oder Gruppen dürfen keinerlei Rechte an der
Datenbank besitzen. Das trifft auch auf alle Angehörigen der Gruppe Administratoren zu.
Buchhalter Pförtner
Ackermann
Lehmann
Lindner
Bauer
Chef Personal
Abfrage: Mitarbeiter
Abbildung 9.25 Grundprinzip der Datenbank
In der Kapitel-Datenbank finden Sie das komplette Beispiel in der gleichen Gliederung wie im vorliegenden
Rezept (Formular Arbeiten mit gesicherten Datenbanken). Die Datenbank nutzen Sie lediglich als Programmierplattform, die
Zieldatenbank wird erst zur Laufzeit erstellt und mit den nötigen Daten versehen.
Folgende Schritte sind erforderlich:
1. Nutzer und Gruppen erstellen (in der aktuellen Arbeitsgruppe)
2. Nutzer den Gruppen zuordnen
3. Datenbank erstellen (die Daten werden aus der Kapiteldatenbank importiert)
4. Rechte an der Datenbank vergeben
Oberfläche
Erstellen Sie eine einfache Oberfläche mit vier Schaltflächen, für die oben angegebenen vier Schritte.
1. Nutzer und Gruppen erstellen
Bevor Sie auch nur eine einzige Tabelle oder Abfrage erstellen, sollten Sie alle benötigten Nutzer und Grup-
pen definieren. Dies ist insbesondere für den User »Chef« wichtig, da dieser zum Owner (Besitzer) der
Datenbank-Objekte gekürt werden soll.
Als
Workspace
wird die aktuelle Arbeitsumgebung verwendet. Wir gehen natürlich davon aus, dass Sie
Administratoren-Rechte besitzen (unbedingt für das Erstellen von Nutzern und Gruppen erforderlich).
1
Die beiden Gruppen sollen lediglich unterschiedliche Zugriffslevel symbolisieren.
541
Zugriffsschutz in Access-Datenbanken
Kapitel 9: Fortgeschrittene Datenbankprogrammierung
Dim ws As Workspace
Set ws = DBEngine.Workspaces(0)
Gruppenname und PID übergeben:
ws.Groups.Append ws.CreateGroup("Buchhalter", "123456")
ws.Groups.Append ws.CreateGroup("Pförtner", "654321")
ws.Groups.Refresh
Name, PID, PW:
ws.Users.Append ws.CreateUser("Chef", "11111", "pwChef")
ws.Users.Append ws.CreateUser("Bauer", "22222", "pwBauer")
ws.Users.Append ws.CreateUser("Ackermann", "33333", "pwAckermann")
ws.Users.Append ws.CreateUser("Lindner", "44444", "pwLindner")
ws.Users.Append ws.CreateUser("Lehmann", "55555", "pwLehmann")
Wie Sie sehen, werden die neu erzeugten
Group
-Objekte sofort an die entsprechende Auflistung angehängt
(kürzeste Schreibweise). Gleiches trifft auf die User zu, übergeben werden neben dem Namen die PID und
das Kennwort.
2. Nutzer den Gruppen zuordnen
Bisher besteht keinerlei Zusammenhang zwischen Nutzern und Gruppen. Dem wollen wir jetzt abhelfen,
indem wir die Damen Lindner und Lehmann der Gruppe Buchhalter sowie Herrn Ackermann der Gruppe
Pförtner zuordnen. Uns selbst wollen wir natürlich nicht vergessen, der »Chef« gehört selbstverständlich zu
den Administratoren.
Dim ws As Workspace
Set ws = DBEngine.Workspaces(0)
ws.Users("Lindner").Groups.Append ws.CreateGroup("Buchhalter")
ws.Users("Lehmann").Groups.Append ws.CreateGroup("Buchhalter")
ws.Users("Ackermann").Groups.Append ws.CreateGroup("Pförtner")
ws.Users("Chef").Groups.Append ws.CreateGroup("Admins")
Die folgenden Gruppenzuordnungen (Benutzer) scheinen auf den ersten Blick wenig sinnvoll zu sein. Der
Grund ist die recht komplexe Vergabe von Rechten an den Systemtabellen, die wir umgehen, wenn alle Nut-
zer zur Gruppe »Benutzer« gehören.
ws.Users("Bauer").Groups.Append ws.CreateGroup("Users")
ws.Users("Lindner").Groups.Append ws.CreateGroup("Users")
ws.Users("Lehmann").Groups.Append ws.CreateGroup("Users")
ws.Users("Ackermann").Groups.Append ws.CreateGroup("Users")
ws.Users("Chef").Groups.Append ws.CreateGroup("Users")
Allerdings wird uns diese Bequemlichkeit im weiteren Programmverlauf noch ein paar Probleme bereiten.
3. Datenbank erstellen
Zum ersten Mal erstellen wir eine neue Arbeitsumgebung, die unabhängig von Ihrer bisherigen Anmeldung
ist. Das System verhält sich jetzt so, als ob der Nutzer »Chef« vor dem PC sitzt. Alle weiteren Aktionen (Er-
stellen von Datenbank-Objekten) haben zur Folge, dass der o.g. Nutzer zum Owner dieser Objekte wird.
An dieser Stelle interessieren wir uns lediglich für die Sicherheitsaspekte.
542

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.