Access-Datenbanken, die man als .accdb bereitstellt, können dem Benutzer immer noch Elemente eröffnen, mit denen dieser auf Bereiche zugreift, die er eigentlich nicht sehen soll. Wir sprechen dabei vor allem vom Navigationsbereich oder von den eingebauten Ribbon-Befehlen, mit denen Elemente in der Entwurfsansicht angezeigt oder sogar bearbeitet werden können. Durch die Umwandlung in eine .accde-Datenbank lässt sich zumindest die Bearbeitung von Formularen, Berichten und VBA-Code verhindern. An die übrigen Elemente kommt der Benutzer aber dennoch heran. Dieser Beitrag zeigt, wie wir für den Benutzer noch einige Möglichkeiten dieser Art sperren können – und wie wir die größtmögliche Sicherheit erreichen.
Eine Access-Datenbank, die wir als .accdb-Datenbank an den Benutzer weitergeben, erlaubt den vollständigen Zugriff auf alle Elemente. Selbst wenn wir den Navigationsbereich zunächst ausblenden und die Access-Spezialtasten blockieren, kann der Benutzer dies in den meisten Fällen und mit ein wenig Geschick umgehen. Das eingebaute Ribbon können wir unsichtbar machen, indem wir eine eigene Ribbondefinition hinzufügen, die wir als Anwendungsribbon festlegen. Aber auch diese Einstellung lässt sich leicht durch Verwenden der Umschalttaste umgehen.
Wir schauen uns erst einmal an, wie wir diese Einstellungen für den unbedarften Benutzer vornehmen können und der Anwendung so einen provisorischen, aber auch leicht zu umgehenden Schutz mitgeben:
- Ribbon ausblenden
- Navigationsbereich ausblenden
- Access-Standardtasten sperren
Ausblenden des eingebauten Ribbons
Das eingebaute Ribbon blenden wir aus, indem wir der Anwendung eine einfache Ribbondefinition wie die aus Listing 1 hinzufügen. Diese bewirkt folgende Änderungen:
<?xml version="1.0"?> <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" loadImage="loadImage"> <ribbon startFromScratch="true"> <tabs> <tab id="grpMain" label="Main-Gruppe"> <group id="grpBeispiel" label="Beispielgruppe"> <button image="banana" label="Formular öffnen" id="btnFormOeffnen" onAction="onAction" size="large"/> </group> </tab> </tabs> </ribbon> <backstage> <tab idMso="PlaceTabHome" visible="false"/> <tab idMso="TabOfficeStart" visible="false"/> <tab idMso="TabRecent" visible="false"/> <tab idMso="TabInfo" visible="false"/> <button idMso="FileSave" visible="false"/> <tab idMso="TabSave" visible="false"/> <tab idMso="TabPrint" visible="false"/> <button idMso="FileCloseDatabase" visible="false"/> <tab idMso="TabHelp" visible="false"/> <button idMso="ApplicationOptionsDialog" visible="false"/> </backstage> </customUI>
Listing 1: Ribbon-Anpassung, um alle eingebauten Elemente auszublenden
- Mit startFromScratch=“true“ im Element ribbon sorgen wir dafür, dass die eingebauten Elemente im Ribbon ausgeblendet werden.
- Durch das Einstellen von visible auf false in den Elementen unterhalb von backstage blenden wir die Datei-Befehle aus.
- Wir blenden lediglich die benutzerdefinierten Befehle ein, die wir tatsächlich bereitstellen wollen.
Damit die Ribbondefinition direkt beim Start angewendet wird, müssen wir den Namen nach dem Anlegen in den Access-Optionen für die Eigenschaft Name des Menübands hinterlegen (siehe Bild 1).
Bild 1: Ribbondefinition festlegen, die beim Start angewendet wird
Daneben benötigen wir noch ein wenig Code für die Funktionalität der Ribbonanpassung, den Sie in den beiden Modulen mdlRibbon und mdlRibbonImages finden. Außerdem müssen wir das anzuzeigende Bild banana.png noch zur Tabelle MSysResources hinzufügen.
Wenn wir die Anwendung nun schließen und erneut öffnen, sieht das Ribbon der Anwendung bereits wie in Bild 2 aus.
Bild 2: Das Ribbon mit ausgeblendeten Standardelementen
Hier hat der Benutzer nun keine Gelegenheit mehr, die Objekte zu manipulieren.
Wenn wir auf Datei klicken, finden wir dort ebenfalls keine Einträge mehr vor (siehe Bild 3). Dafür haben wir mit dem Bereich backstage in der Ribbondefinition gesorgt.
Bild 3: Auch das Datei-Menü ist nun völlig leer.
Auch hier kann der Benutzer nun keinerlei Änderungen mehr vornehmen.
Navigationsbereich ausblenden und Spezialtasten deaktivieren
Nun nehmen wir zwei weitere Änderungen vor, die dem Benutzer den Zugriff auf den Navigationsbereich verwehren sollen.
Um den Navigationsbereich beim Starten gar nicht erst einzublenden, deaktivieren wir, wieder in den Access-Optionen, die Eigenschaft Navigationsbereich anzeigen.
Da der Benutzer diesen Bereich nun problemlos mit der Taste F11 wieder einblenden könnte, verhindern wir auch dies. Dazu deaktivieren wir die Option Access-Spezialtasten verwenden (siehe Bild 4).
Bild 4: Deaktivieren weiterer Eigenschaften
Nach einem erneuten Start bleibt der Navigationsbereich nun ausgeblendet und der Benutzer kann diesen auch gar nicht erst wieder einblenden.
Bisherige Änderungen mit der Umschalt-Taste umgehen
Wenn der Benutzer sich etwas auskennt, wird er jedoch direkt probieren, die Datenbank erneut bei gedrückter Umschalt-Taste zu öffnen. Und er wird damit Erfolg haben: Alle Elemente sind wieder sichtbar, und auch die Einstellung zum Sperren der Access-Spezialtasten kann er so umgehen.
Verwendung der Umschalttaste beim Start verhindern
Um dies zu verhindern, reichen die Access-Optionen nicht mehr aus. Hier müssen wir per VBA eine bestimmte Eigenschaft setzen. Diese heißt AllowBypassKey und muss zunächst zur Anwendung hinzugefügt werden. Wir implementieren die folgenden Funktionen direkt in einer eigenen Datenbankdatei, hier namens EnableDisableBypassKey.accdb.
Wenn AllowBypassKey den Wert True aufweist, kann man die Anwendung bei gedrückter Umschalttaste öffnen und hebelt so die Startoptionen aus. Wenn sie auf False eingestellt ist, hat die Umschalt-Taste keine Wirkung.
Mit der Funktion aus Listing 2 können wir diese Einstellung einfach vornehmen. Wir übergeben dieser den Pfad der Access-Datenbank, für die wir die Einstellung anpassen wollen, sowie den Wert, den wir einstellen wollen.
Public Function SetAllowBypassKey(strPath As String, bolEnable As Boolean) Dim db As DAO.Database Dim prp As DAO.Property Dim strOption As String Dim lngError As Long strOption = "AllowBypassKey" Set db = OpenDatabase(strPath) On Error Resume Next Set prp = db.CreateProperty(strOption, dbBoolean, bolEnable) db.Properties.Append prp lngError = Err.Number On Error GoTo 0 If Not Err.Number = 0 Then db.Properties(strOption) = bolEnable End If End Function
Listing 2: Funktion zum Setzen der Eigenschaft AllowBypassKey
Die Funktion öffnet die angegebene Datenbank mit der OpenDatabase-Methode und versucht, die Eigenschaft zu erstellen und mit dem Wert aus bolEnable zu füllen. Wenn die Eigenschaft bereits vorhanden ist, führt dies zu einem Fehler. In diesem Fall stellen wie die Eigenschaft AllowBypassKey einfach nur auf den Wert aus bolEnable ein.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo