Rubrik: Access | VB-Versionen: VBA | 10.05.05 |
Access-Sicherheit mit MDW-Datei über das Netzwerk Volle ACCESS-Sicherheit mit Verwaltung der ArbeitgruppenDatei (.mdw) über das Netzwerk | ||
Autor: Richard Mittelstädt | Bewertung: | Views: 27.165 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Um ACCESS-Datenbanken wirklich zu schützen, muss man für die Datenbank eine Arbeitsgruppen-Datei (.mdw-Datei) erstellen. Netzwerk-User müssen beim Aufruf der Datenbank diese .mdw-Datei dann mit vollständigem Laufwerk/Pfad/Dateiname als Parameter angeben!
Das Ganze hat natürlich viele Nachteile:
- Ein Grusel-Szenario für den Admin oder? (man hat doch schon genug Angst davor, die eigenen Rechte zu "verspielen")
- Beim Hochfahren des Rechners könnte sich der Laufwerks-Buchstabe auf dem PC des Users ändern, der zum Mounten verwendet wird.
- Wird die Datenbank in ein anderes Verzeichnis verschoben, funktioniert das Ganze auch nicht mehr (egal, ob sinnvoll oder nicht)
- usw.
Dann geht gar nichts mehr und der Admin erntet (zu Recht) einen Riesenhaufen Telefon-Anfragen (weil das eben vorauszusehen war).
Deshalb habe ich mir Gedanken gemacht und hierbei ist mir folgende Idee gekommen:
- Die Arbeitsgruppen-Datei (.mdw-Datei) wird nur einmal auf dem Netz postiert (alles andere scheint Blödsinn, weil jeder User die .mdw + Anleitung bekommen müsste und mein Telefon zum Oberfeind werden würde).
- Beim Aufruf müssen Laufwerk/Pfad absolut egal sein: die passende .mdw muss automatisch gefunden und verwendet werden!
- Anmerkung: Natürlich muss der Admin selbst für die Sicherungen sorgen !!!
- für die Datenbank (MDB-Datei) sowieso
- und jetzt auch für die Arbeitsgruppen-Datei, der .mdw-Datei
Lösung: Wir benötigen eine START-Access-Datenbank:
- Die nachfolgenden Module müssen!!! in der Datenbank START_[mdb-name] stehen! (also neue DB mit dem Namen START_...... anlegen)
- Diese Datenbank startet die eigentliche mdb (mit Verwendung der zugehörigen Arbeitsgruppendatei) und schliesst sich danach selbst.
- Man muss nun nur noch folgende Verzeichnisstruktur und Namensgebung verwenden:
VERZEICHNIS\MDW\Datenbank.mdw VERZEICHNIS\Datenbank.mdb VERZEICHNIS\START_Datenbank.mdb
Somit kann der Ordner "VERZEICHNIS" ab sofort beliebig verschoben werden.
Wollen wir das Ganze also mal versuchen, zu realisieren:
1. Erstellen Sie eine neue Datenbank "START_(Hauptdatenbankname).mdb" in einem beliebigen Verzeichnis auf Ihrer Festplatte und fügen nachfolgenden Code in ein Modul ein:
Option Compare Database Option Explicit Public Const MDW_DIR = "MDW" 'Unterverz. für die .mdw Public Function AppPath() As String ' Aktuellen Pfad vollständig ermitteln mit \ am ENDE ' Dieter Otter ' http://www.vbarchiv.net/archiv/tipp_1187.html Dim sPath As String ' Name und Pfad der aktuellen Datenbank sPath = CurrentDb.Name ' reine Pfadangabe extrahieren While Right$(sPath, 1) <> "\" sPath = Left$(sPath, Len(sPath) - 1) Wend ' Anwendungspfad zurückgeben AppPath = sPath End Function
Public Function StartBankName() As String ' Nur Name dieser START....mdb ermitteln ' Microsys Kramer ' http://www.vbarchiv.net/archiv/tipp_892.html ' nur Dateiname ohne Pfad StartBankName = Dir$(CurrentDb.Name) End Function
Public Function MDB_Name() As String ' Name der Haupt-Datenbank OHNE "START_" If Left(StartBankName(), 6) = "START_" Then MDB_Name = Mid$(StartBankName(), 7) End If End Function
Public Function MDW_Name() As String ' Name der Arbeitsgruppen-Datei .mdw If Left(StartBankName(), 6) = "START_" Then MDW_Name = Left$(MDB_Name(), Len(MDB_Name()) - 4) & ".mdw" End If End Function
Public Function AccessPath() As String ' ACCESS-Pfad (der MSAccess.exe) mit \ am ENDE AccessPath = Application.SysCmd(acSysCmdAccessDir) End Function
Fügen Sie ein weiteres Modul mit folgendem Code hinzu:
Public Function BankStarten() Dim MDB_DAT As String ' MDB volle Länge Dim MDW_DAT As String ' MDW volle Länge Dim EXE_DAT As String ' MSACCESS-EXE volle Länge Dim X ' Shell-Prozess-ID Dim PAR_1 As String ' Parameter- (Optionen-) String für ACCESS-Aufruf ' *** MDB vorhanden ? *********** MDB_DAT = AppPath() & MDB_Name() If Len(Dir(MDB_DAT)) = 0 Then MsgBox "Datenbank:" & vbNewLine & MDB_DAT & vbNewLine & vbNewLine & "nicht gefunden !" DoCmd.Quit acQuitSaveNone End If ' *** MDW vorhanden ? *********** MDW_DAT = AppPath() & MDW_DIR & "\" & MDW_Name() If Len(Dir(MDW_DAT)) = 0 Then MsgBox "ArbeitsGruppenDatei:" & vbNewLine & MDW_DAT & vbNewLine & vbNewLine & "nicht gefunden !" DoCmd.Quit acQuitSaveNone End If ' *** MSACCESS.EXE vorhanden ? *********** EXE_DAT = AccessPath() & "MSACCESS.exe" If Len(Dir(EXE_DAT)) = 0 Then MsgBox "ACCESS-EXE:" & vbNewLine & MDW_DAT & vbNewLine & vbNewLine & "nicht gefunden !" DoCmd.Quit acQuitSaveNone End If ' **** Aufruf mit Parametern ********* ' Parameter- (Optionen-) String PAR_1 = "/wrkgrp " & Chr(34) & MDW_DAT & Chr(34) & " " & Chr(34) & MDB_DAT & Chr(34) ' mdb öffnen X = Shell(EXE_DAT & " " & PAR_1, vbMaximizedFocus) ' Start-Bank schliessen ! DoCmd.Quit acQuitSaveNone End Function
Jetzt benötigen wir noch ein Makro "AUTOEXEC" mit folgenden Befehlen:
- Minimieren
- AusführenCode --> BankStarten()
2. Kopieren Sie nun Ihre Haupt-Datenbank in das erstellte Verzeichnis.
3. Erstellen Sie in dem Verzeichnis ein weiteres Unterverzeichnis "MDW" und kopieren in das Verzeichnis die Arbeitsgruppen-Datei.
4. Jetzt nur noch die START_(Hauptdatenbankname).MDB aufrufen (der Start-...mdb kann man dann sogar noch ein einfaches Access-Datenbank-Kennwort verpassen...)
Und wenn Sie jetzt das komplette Verzeichnis auf ein freigegebenes Netzlaufwerk kopieren, funktioniert das Ganze genauso, als würde die MDB lokal aufgerufen werden!