|
Auch wenn Sie keine Systemdatenbank für Arbeitsgruppen mit Benutzer- und Gruppenberechtigungen einsetzen, können Sie Ihre Access-Datenbanken vor unerlaubten Zugriffen schützen. Dafür legen Sie einfach ein Datenbankkennwort fest. In Access 97 wählen Sie dafür das Menü
Extras - Zugriffsrechte - Datenbankkennwort zuweisen an. In Access 2000 lautet der Befehl
Extras - Sicherheit - Datenbankkennwort zuweisen. Anschliessend tippen Sie das gewünschte Kennwort ein, und schon ist die aktuelle Datenbank geschützt: Ein Öffnen der Datenbank ist in Zukunft nur noch mit Hilfe des Kennworts möglich. Das gilt allerdings auch, wenn Sie per Programmcode auf eine geschützte Datenbank zugreifen wollen. Es wäre sicherlich keine gute Lösung, die
Ausführung von VBA-Prozeduren jedesmal durch eine Aufforderung zur Kennworteingabe zu unterbrechen. Um mit geschützten Datenbanken arbeiten zu können, ohne auf Benutzereingaben angewiesen zu sein, geben Sie das Kennwort im Programmcode an. |
Lösung: |
Dazu ein Beispiel.
Angenommen, Sie hätten eine Datenbank namens SICHER.MDB, der Sie das Datenbankkennwort
"schutz" zugewiesen haben. Nun wollen Sie aus einer zweiten MDB-Datei per VBA-Code auf die geschützte Datenbank zugreifen - in den folgenden Programmzeilen etwa, um die Tabellennamen auszulesen.
Dazu legen Sie in der zweiten Access-Datenbank ein neues Modul an, in das Sie folgenden Code eingeben:
Access 97 mit DAO:
Sub PWD_Zugriff()
Dim dbExtDB As Database
Dim tblExtDB As TableDef
Dim strAktDBPfad As String
Dim strAusgabe As String
strAktDBPfad = CurrentDb.Name
Do While Mid(strAktDBPfad, _
Len(strAktDBPfad),
1) <> "\"
strAktDBPfad = Left(strAktDBPfad, _
Len(strAktDBPfad) - 1)
Loop
Set dbExtDB = DBEngine.OpenDatabase(strAktDBPfad & _
"Sicher.mdb", False, False, ";pwd=schutz")
For Each tblExtDB In dbExtDB.TableDefs
strAusgabe = strAusgabe & tblExtDB.Name
& vbCr
Next tblExtDB
MsgBox "Die Tabellen der geschützten
Datenbank:" & _
vbCr & strAusgabe
End Sub
Access
2000 mit ADO:
Sub PWD_Zugriff()
Dim cnnAktDB As ADODB.Connection
Dim catExtDB As New ADOX.Catalog
Dim tblExtDB As ADOX.Table
Dim strAktDBPfad As String
Dim strAusgabe As String
Set cnnAktDB = CurrentProject.Connection
strAktDBPfad = cnnAktDB.Properties("Data Source")
Do While Mid(strAktDBPfad, Len(strAktDBPfad), 1)
<> "\"
strAktDBPfad = Left(strAktDBPfad, _
Len(strAktDBPfad)
- 1)
Loop
catExtDB.ActiveConnection = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strAktDBPfad & "Sicher.mdb;"
& _
"Jet OLEDB:Database Password=schutz;"
For Each tblExtDB In catExtDB.Tables
strAusgabe = strAusgabe & tblExtDB.Name
& vbCr
Next tblExtDB
MsgBox "Die Tabellen der geschützten
Datenbank:" & _
vbCr & strAusgabe
End Sub
Voraussetzung für eine
fehlerfreie Funktionsweise ist, dass sich die geschützte Datenbank
SICHER.MDB im selben Verzeichnis befindet wie die aktuelle Datenbank
mit dem Makrocode.
Wichtig: In Access 2000 müssen Sie ausserdem einen Verweis
auf die ADOX-Bibliothek herstellen. Dazu wählen Sie im Modul das
Menü Extras-Verweise an und
aktivieren dann den Eintrag "Microsoft ADO Ext. 2.5 for DDL and
Security".
Nun zur Funktionsweise: In beiden Fällen wird zunächst der Name
der aktuellen Datenbank ermittelt, was in DAO (Access 97) über das
CurrentDB-Objekt geschieht und in ADO (Access 2000) über die "Data
Source"-Eigenschaft der Verbindung zum aktuellen Projekt. In
der Do-Loop-Schleife wird der Dateiname entfernt, so dass "strAktDBPfad"
nur noch den Pfad enthält.
Für den Datenbankzugriff per Kennwort ist dann die folgende
Codezeile massgebend. In DAO geben Sie das Kennwort im vierten
Parameter der OpenDatabase-Methode als Textstring an:
";pwd=schutz"
In ADO nennen Sie das Kennwort im Rahmen des "ConnectionString"
einer Verbindung, hier im Rahmen der ActiveConnection-Eigenschaft
des Catalog-Objekts:
"Jet OLEDB:Database Password=schutz;"
Der Rest des VBA-Makros steht dann nur beispielhaft für Aktionen,
die Sie an der geschützten Datenbank vornehmen. In diesem Fall
ermittelt eine For Each-Next-Schleife die Namen der vorhandenen
Tabellen, die am Ende in einem Meldungsfenster ausgegeben werden. Um
den Programmcode auszuführen, setzen Sie den Cursor einfach in eine
beliebige Zeile des Makros und drücken F5. |