Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 4/2008.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erfahren Sie, wie Sie Access 2007-Datenbanken durch das Sicherheitssystem schützen können.

Techniken

Tabellen, VBA, Sicherheitssystem

Voraussetzungen

Access 2007

Beispieldateien

Unsicher.accdb, Sicher.accdb, Sicher.bat, Sicher.mdw

Shortlink

616

Access 2007: Sicherheitssystem einsetzen

André Minhorst, Duisburg

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 (s. Abb. 1) über den folgenden Befehl, den Sie im Direktfenster des VBA-Editors (Strg + G) absetzen:

pic001.tif

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

pic002.tif

Abb. 2: Festlegen des Arbeitsgruppenbesitzers

Im folgenden Dialog geben Sie den Namen der zu verwendenden Arbeitsgruppen-Informationsdatei an, die vermutlich neu erstellt werden soll (s. Abb. 3).

pic004.tif

Abb. 3: Anlegen einer

Nachdem Sie sich auf diese Weise an die Arbeitsgruppen-Informationsdatei angeschlossen haben, erscheinen nochmals alle wichtigen Informationen (s. Abb. 4).

pic006.tif

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

steht nicht zur Verfügung - er löst schlicht einen Fehler aus, der darauf hinweist, dass dieser Befehl derzeit nicht verfügbar ist (wenn Sie eine .mdb-Datenbank bearbeiten, funktioniert dies hingegen schon). Also müssen Sie alles per VBA erledigen, und zwar über die entsprechenden Elemente der DAO-Bibliothek.

IntelliSense für verborgene Elemente aktivieren

Die Elemente von DAO, die unter Access 2007 nur noch aus Kompatibilitätsgründen vorliegen, werden von IntelliSense nicht mehr berücksichtigt und auch im Objektkatalog nicht mehr angezeigt - zumindest nicht, bis man deren Anzeige nicht über den Kontextmenüeintrag Verborgene Elemente anzeigen aktiviert. Anschließend erscheinen diese Elemente sowohl im Objektkatalog als auch unter IntelliSense in hellgrauer Schrift. Diesen Vorgang müssen Sie übrigens nach jedem Neustart von Access wiederholen (s. Abb. 5).

pic003.tif

Abb. 5: Einblenden verborgener Elemente

Benutzer ausgeben

Die folgende kleine Routine gibt beispielsweise alle Benutzer des aktuellen Workspace-Objekts aus, in dessen Kontext die Datenbankanwendung läuft.

Optional geben Sie die Gruppe an, deren Benutzer die Routine ausgeben soll:

Public Sub ShowUsers(Optional _

    strGroup As Variant)

    Dim wrk As DAO.Workspace

    Dim usr As DAO.User

    Dim grp As DAO.Group

    Set wrk = DBEngine.Workspaces(0)

    If IsMissing(strGroup) Then

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Benutzerverwaltung

Verschlüsselung und Komprimieren im Backend

Access, MySQL und Berechtigungsverwaltung

© 2003-2015 André Minhorst Alle Rechte vorbehalten.