vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Access   |   VB-Versionen: VBA10.05.05
Access-Sicherheit mit MDW-Datei über das Netzwerk

Volle ACCESS-Sicherheit mit Verwaltung der ArbeitgruppenDatei (.mdw) über das Netzwerk

Autor:   Richard MittelstädtBewertung:  Views:  27.165 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11kein 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:

  1. 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).
  2. Beim Aufruf müssen Laufwerk/Pfad absolut egal sein: die passende .mdw muss automatisch gefunden und verwendet werden!
  3. 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!
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.