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).