Laut Microsoft ist das Sicherheitssystem von Access in Datenbanken im .accdb-Format gestorben. Wir haben herausgefunden, das dies aber mitnichten so ist: Zwar gibt es keine Dialoge mehr, um die Sicherheit einzustellen und Benutzer und Gruppen zu verwalten, und auch bei hoch konvertierten Datenbanken älterer Versionen reagiert das Sicherheitssystem nicht wie erwartet, aber das ist kein Grund zum Verzweifeln: Mit ein paar kleinen Tricks schützen Sie mit dem guten alten Sicherheitssystem zumindest noch die Tabellen Ihrer Anwendung.
Die Nachricht, dass Access 2007 in Datenbanken, die im neuen Format erstellt werden, das Sicherheitssystem nicht mehr unterstützt, fand gemischten Anklang: Die einen interessierte dies nicht, weil das Sicherheitssystem ohnehin keinen hundertprozentigen Schutz mehr bot, die anderen waren verunsichert und fragten sich, wie sie ihre Daten zumindest rudimentär vor unbefugtem lesenden oder auch schreibenden Zugriff schützen. Eine Alternative gibt es für diesen Fall: Man muss die Datenbank dazu in eine SQL Server-Datenbank migrieren (unabhängig davon, ob man nun den Microsoft SQL Server oder ein Konkurrenzprodukt wie etwa MySQL verwendet).
Es ist allerdings nach wie vor möglich, eine Datenbank im Access 2007-Format zu schützen – auch wenn sich dieser Schutz nur auf Tabellen bezieht. Aber die übrigen Objekte kann man schließlich auch per Code schützen, indem man beim Öffnen den aktuellen Benutzer abfragt und das Objekt dann entweder öffnet oder dem Benutzer den Zugriff verweigert – Sie müssen die Datenbank dann nur in eine .accde-Datei umwandeln, damit der Benutzer den schützenden Code nicht ändern und somit unwirksam machen kann.
Das Schützen der Tabellen erfordert allerdings eine Menge Mehraufwand gegenüber älteren Access-Versionen, wobei der größte Teil daraus resultiert, dass Sie die Funktionen der Dialoge zum Hinzufügen von Benutzern und Benutzergruppen sowie zum Setzen der Berechtigungen per VBA nachprogrammieren müssen.
Dies allein reicht allerdings nicht aus: Selbst wenn Sie sich passende Routinen zurechtlegen und eine Datenbank schützen, erfolgt der Zugriff auf die Tabellen ohne Probleme. Was also ist der Trick Dazu holen wir ein wenig aus: Beim Herumspielen mit einer .accdb-Datenbank fiel auf, dass der schreibende Zugriff auf die Systemtabellen wie MSysObjects nach wie vor nicht möglich ist. Es erschien unwahrscheinlich, dass Access auch in früheren Versionen zwei verschiedene Sicherheitssysteme enthielt, welche die Systemtabellen auf der einen und die benutzerdefinierten Tabellen auf der anderen Seite schützten. Wenn also eine Systemtabelle in einer .accdb-Datei noch geschützt ist, muss das Sicherheitssystem noch vorhanden. Dafür sprechen auch die zwar ausgeblendeten, aber immer noch vorhandenen Einträge zum Bearbeiten von Benutzern, Benutzergruppen und Berechtigungen in der DAO 12.0-Bibliothek.
Eine benutzerdefinierte Tabelle lässt sich relativ einfach in eine Systemtabelle umwandeln: dazu braucht man nur eine Eigenschaft zu ändern. Das Ganze haben wir an einer vom .mdb-Format zum .accdb-Format migrierten Beispieldatenbank ausprobiert, die eine einzige geschützte Tabelle enthielt. Und siehe da: Vor dem Umwandeln in eine Systemtabelle war diese Tabelle erwartungsgemäß ungeschützt, danach aber wurde der Zugriff wie gewünscht eingeschränkt!
Ein letzter Test war ebenfalls noch notwendig: Der Benutzer darf natürlich nicht die Eigenschaften der in eine Systemtabelle umgewandelten Tabelle ändern, da er diese sonst wieder zu einer normalen Tabelle machen kann. Aber auch dies funktionierte reibungslos, wenn man dem Benutzer die änderung des Entwurfs untersagte.
Wir zeigen Ihnen in den folgenden Abschnitten, wie Sie eine .accdb-Anwendung schützen können.
Systemtabellen für normale Daten
Die einzige Frage, die sich stellt, ist die, ob es irgendwelche Probleme mit Tabellen gibt, die zum Zwecke der Aktivierung des Schutzes in Systemtabellen umgewandelt wurden. Es gibt noch keine umfassenden Erfahrungen, aber zumindest auch noch keine negativen: Der Zugriff erfolgt von allen Access-Objekten wie Abfragen, Formularen und Berichten genauso wie von VBA aus für den mit Berechtigung angemeldeten User ohne Probleme.
Der einzige Nachteil ist natürlich, dass die Tabellen im Navigationsbereich nur mit den eingebauten Systemtabellen zusammen entweder ein- oder ausgeblendet werden können. Dies ist allerdings kein Nachteil, da die Systemtabellen beim Entwickeln wohl kaum stören und der Endanwender diese ohnehin nicht zu Gesicht bekommen soll.
Datenbank schützen
Vor dem Schützen einer Datenbank sollten Sie vorsichtshalber eine Sicherheitskopie derselben anlegen.
Anschließend starten Sie den Arbeitsgruppenadministrator (siehe Bild 1) über den folgenden Befehl, den Sie im Direktfenster des VBA-Editors (Strg + G) absetzen:
Bild 1: Der Arbeitsgruppenadministrator von Access
DoCmd.RunCommand acCmdWorkgroupAdministrator
Immerhin ist dieser, im Gegensatz zu den Dialogen zum Verwalten von Benutzern und Benutzergruppen sowie der Berechtigungen, noch verfügbar – und zwar auch für .accdb-Datenbanken.
Dort klicken Sie auf die Schaltfläche Erstellen, woraufhin der Dialog aus Bild 2 erscheint. Dort tragen Sie Ihren Namen, die Firma und eine Arbeitsgruppen-ID ein. Die Informationen zeigt Access später noch einmal an, damit Sie sich diese notieren können.
Bild 2: Festlegen des Arbeitsgruppenbesitzers
Im folgenden Dialog geben Sie den Namen der zu verwendenden Arbeitsgruppen-Informationsdatei an, die vermutlich neu erstellt werden soll (siehe Bild 3).
Bild 3: Anlegen einer
Nachdem Sie sich auf diese Weise an die Arbeitsgruppen-Informationsdatei angeschlossen haben, erscheinen nochmals alle wichtigen Informationen (siehe Bild 4).
Bild 4: Informationen zur
Nun ist es aber so, dass diese Arbeitsgruppen-Informationsdatei standardmäßig mit Access verwendet wird. Sie sollten also im Anschluss wieder der Standard-Arbeitsgruppen-Informationsdatei (System.mdw) beitreten.
Damit die neue Arbeitsgruppen-Informationsdatei in Zusammenhang mit der zu schützenden Anwendung geöffnet wird, verwenden Sie zum Öffnen eine entsprechende Verknüpfung, die etwa folgenden Inhalt hat:
"C:\Programme\Microsoft Office\Office12\MSACCESS.EXE" c:\Sicher.accdb /wrkgrp c:\Sicher.mdw
Später geben Sie hier zusätzlich den Namen des Benutzers und sein Kennwort an.
Schließen Sie die Anwendung und öffnen Sie diese mit der oben beschriebenen Verknüpfung erneut. Fragen Sie dann ab, ob die Anwendung die richtige Arbeitsgruppen-Informationsdatei verwendet. Dies erledigen Sie ganz einfach über die folgende Anweisung im Direktfenster:
Debug.Print SysCmd(acSysCmdGetWorkgroupFile) c:\Sicher.mdw
Datenbank absichern
Unter Access 2003 und älter würden Sie nun den Menübefehl Extras|Sicherheit|Benutzer- und Gruppenkonten… auswählen, um den Dialog Benutzer- und Gruppenkonten zu öffnen. Da das Sicherheitssystem mit .accdb-Dateien offiziell nicht mehr unterstützt wird, hat Microsoft natürlich keinen solchen Befehl eingebaut, und auch der ersatzweise verwendbare VBA-Befehl
docmd.RunCommand acCmdUserAndGroupAccounts