Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Autor: von Harald Langer, Berlin
Zeit ist Geld. Diese Weisheit ist Grundlage für so manche Rechnung, die der Auftragnehmer seinem Kunden stellt. Natürlich funktioniert dies nur, wenn die Arbeitstunden auch dokumentiert werden. Hierbei unterstützt Sie die hier vorgestellte Musterlösung. Als Szenario für die Datenbank dient ein kleiner Industriebetrieb, in dem die Mitarbeiter ihre Arbeitsstunden für die einzelnen Projekte aufschreiben.
Die Protokollierung von Arbeitsstunden ist sicherlich eine lohnenswerte Angelegenheit. Spätestens aber dann, wenn die Daten im Netzwerk von mehreren Benutzern erfasst werden, sollte aus Datenschutzgründen eine gewisse Sicherheit der Daten gewährleistet werden.
Es sollte zumindest sichergestellt sein, dass die Mitarbeiter nur ihre eigenen Arbeitsstunden erfassen oder ändern können und nicht die ihrer Kollegen.
Um einen sicheren Schutz der Datenbank zu gewährleisten, sollte das Sicherheitssystem von Access bereits vom ersten Schritt an aktiviert sein. Bei dieser Lösung wird der Schutz durch eine Arbeitsgruppendatei erreicht, sodass bei Bedarf für jeden Benutzer individuelle Zugriffsrechte auf die einzelnen Datenbankobjekte definiert werden können.
Dementsprechend muss sich jeder Mitarbeiter vor der Arbeit mit der Datenbank mit einem Benutzernamen und einem Passwort anmelden.
Hinweis
Eine ausführliche Anleitung über das Sichern einer Datenbank finden Sie im Beitrag Skalierbare Datensicherheit mit Access in der vorliegenden Ausgabe von Access im Unternehmen. Daher finden Sie hier nur eine Kurzbeschreibung der wichtigsten Schritte.
Bild 1: Rechte an Tabellen entziehen
In den folgenden beiden Abschnitten finden Sie einige Informationen zu den Tabellen und Abfragen der Beispieldatenbank. Dabei wird besonderer Wert auf den Aspekt der Sicherheit und damit der Berechtigungsproblematik gelegt.
Tabellen
Für die Grundfunktionalität benötigt die hier vorgestellte Musterlösung zur Stundenzettelverwaltung lediglich zwei Tabellen. Die Tabelle tblLeistungen enthält die Leistungsbeschreibungen. Die Details der Leistungen werden in der Tabelle tblLeistungsdetails hinterlegt.
Zur Abrechnung der Leistungen des Freiberuflers mit seinem Auftraggeber kann dies auch ausreichen; sinnvoll ist auf jeden Fall eine weitere Tabelle namens tblAdressen, in der die Auftraggeberadressen gespeichert werden.
Die Musterlösung enthält darüber hinaus noch die Tabelle tblMitarbeiter für die Mitarbeiterdaten und die Tabelle tblGruppen für die Benutzergruppen. Aus Komfortzwecken ist auch noch die Untertabelle tblWaehrungen mit Währungsdaten vorhanden. Die Tabelle übersichtseinträge wird vom Access-übersichts-Manager erzeugt und ist für das Beispiel nicht von Bedeutung.
Alle Tabellen finden Sie in den fertigen Beispieldatenbanken Stunden97.mdb und Stunden2000.mdb auf der Heft-CD. Sie können die Tabellen, Abfragen und weitere Datenbankobjekte leicht in Ihre neue Datenbank importieren.
Beziehungen
Zwischen den genannten Tabellen gibt es einige Beziehungen, die im Folgenden beschrieben werden: Die Tabellen tblLeistungen und tblAdressen sind über das Feld lngAuftraggeber miteinander verknüpft.
Die Tabellen tblMitarbeiter und tblGruppen sind über das Feld txtBenutzergruppe miteinander verknüpft.
Jede Leistung kann aus mehreren Leistungsdetails bestehen, die wiederum von je einem Mitarbeiter ausgeführt werden. Daher ist die Tabelle tblLeistungsdetails über das Feld lngAuftrag mit der Tabelle tblLeistungen und über das Feld lngMitarbeiter mit dem entsprechenden Mitarbeiter-Datensatz aus der Tabelle tblMitarbeiter verknüpft.
Abfragen
Formularen oder Berichten kann lediglich das Recht zugewiesen werden, sie zu öffnen bzw. auszuführen (die anderen Formularrechte können hier vernachlässigt werden). Aber bei beiden muss auch noch eine Verbindung zu den Daten hergestellt werden.
Angenommen, einem Benutzer wird die Berechtigung erteilt, ein Formular zu öffnen, aber gleichzeitig wird ihm das Recht verweigert, die Daten der zugrunde liegenden Tabelle zu lesen. Dann kann der Benutzer zwar tatsächlich das Formular öffnen, aber er erhält eine Fehlermeldung mit dem Hinweis, dass die Datensätze nicht gelesen werden können – eben weil die Datenherkunft gesperrt ist.
Nun wäre es natürlich relativ einfach, dem Benutzer in solchen Fällen auch die Berechtigungzu erteilen, die Tabellendaten zu lesen. In kritischen Fällen, insbesondere bei Daten, die zum Beispiel mit Lohnabrechnungen in Zusammenhang stehen, ist dies jedoch nicht akzeptabel.
Bei konsequenter Verwendung des Schutzsystems werden keinerlei Berechtigungen auf Tabellen vergeben, sondern für jede Datenmenge Abfragen erstellt und diese für die Rechtevergabe herangezogen.
Das alleine nutzt allerdings noch nichts, denn Abfragen werden standardmäßig mit den Ausführungsberechtigungen des Benutzers angelegt (wenn der Benutzer auf der Tabelle keine Rechte hat, dann liefert auch die Abfrage keine Daten).
Um zu erreichen, dass der Benutzer die Daten der Abfrage auch lesen kann, muss die Abfrage mit Ausführungsberechtigung des Eigentümers angelegt werden. Das wird entweder grundsätzlich über die Programmoptionen, in den Eigenschaften der Abfrage oder direkt im SQL mit dem Zusatz WITH OWNERACCESS OPTION festgelegt:
SELECT tblAdressen.* FROM tblAdressen WITH OWNERACCESS OPTION;
Hinweis
Das Setzen des Zusatzes WITH OWNERACCESS OPTION funktioniert nur in gespeicherten Abfragen. Wenn Sie innerhalb einer VBA-Prozedur eine SQL-Abfrage verwenden, können Sie diese Option nicht benutzen.
Alle Abfragen in der Musterlösungsdatenbank sind mit Berechtigung des Eigentümers erstellt und dienen als Datengrundlage.
Nun ist die Datenbank geschützt und der Einzelne kann nur die Daten sehen, die er auch sehen darf.
Das ist soweit in Ordnung, aber stellen Sie sich jetzt den kleinen Industriebetrieb mit einer Abteilung Schlosserei vor. Der Schlosser soll seine Stunden in den Stundenzettel eingeben.
Welches Entgelt die Firma mit dem Auftraggeber vereinbart hat, ist für ihn nicht relevant (wahrscheinlich soll er es auch nicht wissen). Es muss lediglich sichergestellt sein, dass er „seinen“ Stundenzettel ausfüllen und vielleicht auch noch seine Arbeitszeit den vorhandenen Aufträgen zuordnen kann – mehr nicht.
Ganz anders verhält es sich bei Mitarbeitern in der Verwaltung, die allgemeine Tätigkeiten ausführen.
Die Musterlösung verwendet den Access-Schutzmechanismus, um genau dieser Problematik gerecht zu werden, indem der angemeldete Benutzer identifiziert und ein für seine Benutzergruppe festgelegtes Startformular geöffnet wird.
Steuerung des Startformulars
Im Formular frmGruppen kann den vorhandenen Benutzergruppen ein Startformular zugewiesen werden.
Beim öffnen des Formulars wird das Kombinationsfeld txtGRUPPE mit den Benutzergruppen des aktuellen Workspaces und das Kombinationsfeld txtSTART mit den Werten der Abfrage qryFormulare gefüllt (siehe Bild 2).
Bild 2: Benutzergruppen und Startformulare
Public Sub GetGroups() Dim grp As Group, usr As user For Each grp In DBEngine(0).Groups For Each usr In grp.Users Debug.Print "Gruppe: "; grp.Name, _ "User: "; usr.Name Next Next End Sub
Quellcode 1
Mitarbeiter und Benutzergruppen
Im Anschluss werden die Mitarbeiter mit dem Formular frmMitarbeiter erfasst und ihrer jeweiligen Haupt-Benutzergruppe zugeordnet.
Der Grund dafür ist, dass jeder Benutzer mehreren Benutzergruppen zugeteilt sein kann (in der Musterlösung ist dies nicht der Fall, sonst aber durchaus gängige Praxis). Die Prozedur GetGroups im Modul mdlUsers listet alle Benutzergruppen und Gruppenangehörige auf (s. Quellcode 1).
Wenn nun ein Benutzer in mehreren Gruppen vorkommt (die Gruppe Benutzer kann nicht entfernt werden und ist damit automatisch bei jedem Nutzer vorhanden), welcher Gruppe soll Priorität verliehen werden
Diese Entscheidung wird mit dem Formular gefällt. Die Stundenzetteldatenbank geht davon aus, dass die Namen der Mitarbeiter und die Benutzernamen identisch sind. Auf jeden Fall ist es erforderlich, dass dem jeweiligen Mitarbeiter auch ein Access-Benutzername zugewiesen wird.
Starten
Damit nun das entsprechende Startformular auch beim Start der Datenbank geladen wird, enthält die Musterlösung ein Autoexec-Makro, das nichts anderes macht, als die Funktion fStart (im Modul mdlStart) auszuführen.
Dass sich das Autoexec-Makro durch Drücken der Umschalt-Taste umgehen lässt und das wiederum durch andere Mechanismen verhindert werden kann, soll hier nur am Rande bemerkt werden.
Zur Ermittlung des angemeldeten Benutzers stellt Access die Funktion CurrentUser zur Verfügung. Beim Aufruf der Funktion wird aus der Abfrage qryMitarbeiter die Haupt-Benutzergruppe des aktuell angemeldeten Mitarbeiters ermittelt.
Wenn sich die Benutzergruppe feststellen lässt (es wäre ja auch denkbar, dass ein Mitarbeiter zwar angelegt, aber noch nicht in der Datenbank einer Gruppe zugeordnet wurde), wird im folgenden Schritt das für diese Gruppe festgelegte Startformular aufgerufen und angezeigt.
Um die Anmeldung zu prüfen, starten Sie die Beispieldatenbank über die Verknüpfung mit dem Parameter /wrkgrp und verwenden Sie den Anmeldenamen Hans Mustermann – das Kennwort lassen Sie frei (siehe Bild 3). Daraufhin zeigt die Datenbank den Stundenzettel für Hans Mustermann an.
Bild 3: Anmelden als Benutzer Hans Mustermann
Hinweis
Im Verzeichnis der Beispieldatenbank finden Sie eine entsprechende Verknüpfung, in der der Parameter /wrkgrp bereits angegeben ist. Kopieren Sie die Datei in das Verzeichnis C:\Stunden und öffnen Sie das Eigenschaftsfenster. Passen Sie hier den Pfad zu MSACCESS.EXE an. übernehmen Sie die änderungen und klicken Sie doppelt auf den Link, um Access mit der Arbeitsgruppendatei zu starten. Voraussetzung für die einwandfreie Funktion ist, dass Sie die Beispieldatenbank zusammen mit allen anderen Dateien des gleichen Verzeichnisses von der CD in das Verzeichnis C:\Stunden kopiert haben. (
Anzeige des Stundenzettels
Bild 4: Das Formular frmStundenzettel
Bild 5: Stundenzettel-Unterformular mit unsichtbaren Steuerelementen.
Das Formular frmStundenzettel (siehe Bild 4) greift als Datenherkunft auf die Abfrage qryStundenzettel zurück. In dieser Abfrage wird als Kriterium für den Mitarbeiternamen die Funktion CurrentUser verwendet (hätten Sie sich als Frau Musterfrau angemeldet, würden Sie den Stundenzettel dieser Mitarbeiterin sehen).
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