9.2k Aufrufe
Gefragt in Datenbanken von
Hallo zusammen,

ich habe folgendes Problem:
Ich möchte nur ein paar Personen den Zugang zu einer Datenbank erlauben. Sie sollen also per Login-Daten mittels Passwort auf die Datei zugreifen können.
Also, man startet das "Programm" per Doppelklick oder per Hyperlink und man soll sofort seine Zugangsdaten eintragen. Nach erfolgreichem Login soll man die Datei weiter bearbeiten können.
Wenn man falsche Login-Daten einträgt, soll der Anfangsbildschirm erscheinen mit dem Hinweis, dass etwas falsches eingegeben worden ist und der Zugriff deswegen verweigert wurde.

Geht das in Access?

Danke für eure Antworten
Grüße

8 Antworten

0 Punkte
Beantwortet von snoopie Experte (3.2k Punkte)
Hallo realblacky!

Grundsätzlich lässt sich MS Access problemols mit Passwort schützen. Bei meinem MS Access 97 geht das über Extras - Zugriffsberechtigungen.

Gruss,
Snoopie
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Hallo Blacky,

Du kannst Dir auch eine Autoexec machen mit einer inputbox zur Passworteingabe und einer anschließenden Schleife: passwort korrekt, dann DB öffnen, else meldung und wieder schließen, wenn Du selbst einen Text eintragen willst bei falscher Eingabe.

Aber falls Dir handelsübliche Passworteingabe reicht ist es natürlich viel einfacher Snoopies Vorschlag anzunehmen.

Wenn nicht melde Dich nochmal, wenn Du nicht klarkommst.

Gruß marie
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo realblacky,

eine einigermaßen sichere MDB bekommst du eigentlich nur über die Änderung bzw. Neuerstellung der Arbeitsgruppen-DB (*.MDW) hin. Die Variante über autoexec funktioniert nur bei absoluten Laien. Allein durch das Drücken der Shift-Taste beim Programmstart hebelst du die Ausführung der autoexec aus. Auf jeden Fall solltest du dann in den Einstellungen die F11-Taste sperren und das DB-Fenster ausblenden.
Aus diesem Grund solltest du über die MDW gehen. Die Default-MDW (system.mdw) solltest du nicht ändern, sondern eine neue anlegen (Menü Extras...). Die kannst du dann verwenden, indem du dem Aufruf der "msaccess.exe" den Parameter "/wrkgrp <pfad zur mdw>" mit gibst (und evtl. direkt noch die MDB als weiterer Parameter).
Um deine MDB nun korrekt abzusichern, solltest du unter der neuen MDW ein Entwicklerkonto (bzw. eine Entwicklergruppe) erstellen und dem alle Rechte für die bestehenden Objekte und neuen Objekte einräumen. Ich teile nur den Gruppen Rechte zu, nie einem User. Das ist einfacher zu administrieren. Allen anderen (Gruppen und User, als auch dem admin und der admin-Gruppe) entziehst du ALLE Rechte. Nur der Gruppe USERS gibst du die Rechte, die zur Ausführung der Anwendung benötigt werden. Dies musst du unbedingt unter einer Userkennung (die zu der Gruppe USERS gehört) ausprobieren. Manchmal sind mehr rechte notwendig als gedacht. Auch solltest du mit der der Original-MDW die MDB noch mal testen und prüfen, ob die Standardrechte nicht mehr greifen.
Falls du eine MDB schützen willst, solltest du schon zu beginn mit der gesicherten MDW arbeiten, so ersparst du dir eine menge Arbeit im Nachhinein.
Den VBA-Code solltest du auch noch mit einem Passwort versehen. Es ist auch möglich, den VBA-Code mit PGP zu sichern (in der c't war letztes Jahr dazu eine prima Anleitung).
Davor solltest du natürlich eine Sicherung der MDB machen, denn es ist möglich dich komplett aus zu sperren!

Gruß
Ralf
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Sorry ralf, aber meine Autoexec hebelst Du nicht aus. Wie du in der Autoex die Shifttaste sperrst und das Datenbankfenster ausblendest steht in der OH, das kann Blacky einfach dort kopieren. Schau mal unter Starteigenschaften. Dann musst Du die DB nur einmal gestartet haben, bevor Du sie auslieferst, damit sie mit gesperrter Shifttaste und ausgeblendetem Datenbankfenster ausgeliefert wird.

Eine eigene System.mdw brauchst Du nur, wenn Du deinen Code sperren willst, dann vorgehen wie Ralf beschrieben hat. Aber nicht vorhandene Tabellen und Abfragen sperren. Und wenn Du auf einem Rechner, auf dem deine System.mdw nicht ist, eine neue Tabelle oder Abfrage anlegen willst, was Du gesperrt hast, (Anfügeabfrage, Löschabfrage,Tabellenerstellungsabfrage usw) in deinem Code, dann kannst Du "WITH OWNERACCESS OPTION" ans Ende des SQL-Codes schreiben, damit erteilst Du dem Benutzer die Berechtigung für diese Aktion.

Hier ist das gut beschrieben: office.microsoft.com/de-de/access/HA012315271031.aspx

Gruß Marie
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Marie,

für eine Login-Abfrage ist deine Lösung zu kurz gedacht. Es sind weitere Punkte zu beachten. Zunächst muss man sicher stellen, dass das Access-Menü die Menüpunkte "Fenster" und "Extras" nicht mehr anzeigt bzw. anzeigen kann. Denn dann bekommst du wieder Zugriff auf das DB-Fenster und kannst die autoexec aushebeln. Auch wenn das funktioniert, muss man zusätzlich den Code mit einem Passwort schützen, sonst könnte ich einfach alle Objekte (natürlich ohne die autoexec) in eine neue DB importieren und hätte wieder vollen Zugriff. Das größte Problem besteht allerdings in der Loginroutine selbst. Die Usernamen und Passwörter müssen natürlich gespeichert und verschlüsselt werden und das ist nur mit viel Code und Wissen zu machen. Somit sehe ich nur die Arbeitsgruppen-DB als sinnvolles (Access-eigenes) Mittel an.
Ich muss aber sagen, dass das Ausblenden der "Shift"-Funktion sehr nett ist und ich nicht kannte.

Gruß
Ralf
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Ich muss aber sagen, dass das Ausblenden der "Shift"-Funktion sehr nett ist und ich nicht kannte.


siehste, und wenn du halt mal in die Hilfe schaust unter Starteigenschaften, dann siehst Du, dass man dort auch sämtliche Menüleisten und Symbolleisten ausblenden kann und vieles mehr, mit einer Zeile Code.

Hier, Kopie aus der Hilfe.

Sub EinstellenStarteigenschaften()
ÄndernEigenschaft "StartupForm", dbText, "Kunden"
ÄndernEigenschaft "StartupShowDBWindow", dbBoolean, False
ÄndernEigenschaft "StartupShowStatusBar", dbBoolean, False
ÄndernEigenschaft "AllowBuiltinToolbars", dbBoolean, False
ÄndernEigenschaft "AllowFullMenus", dbBoolean, True
ÄndernEigenschaft "AllowBreakIntoCode", dbBoolean, False
ÄndernEigenschaft "AllowSpecialKeys", dbBoolean, True

ÄndernEigenschaft "AllowBypassKey", dbBoolean, True
End Sub

Function ÄndernEigenschaft(strEigenschaftenname As String, varEigenschaftentyp As Variant, varEigenschaftenwert As Variant) As Integer
Dim dbs As Database, prp As Property
Const conPropNotFoundError = 3270

Set dbs = CurrentDb
On Error GoTo Ändern_Fehler
dbs.Properties(strEigenschaftenname) = varEigenschaftenwert
ÄndernEigenschaft = True

Ändern_Ende:
Exit Function

Ändern_Fehler:

If Err = conPropNotFoundError Then ' Eigenschaft nicht gefunden.
Set prp = dbs.CreateProperty(strEigenschaftenname, _
varEigenschaftentyp, varEigenschaftenwert)
dbs.Properties.Append prp
Resume Next
Else
' Unbekannter Fehler.
ÄndernEigenschaft = False
Resume Ändern_Ende
End If
End Function


Gruß Marie
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo marie,

ich hoffe realBlacky "hört noch zu"....
Vielen Dank für den Code-Schnipsel, das werde ich in Zukunft verwenden.

Gruß
Ralf
0 Punkte
Beantwortet von
Hallo zusammen!

Ja, ich höre und lese noch zu....
Ich war im Urlaub und konnte es hier leider nicht verfolgen.
Zunächst erst einmal VIELEN DANK! für die Antworten, dennoch muss ich die "Vorschläge" erst einmal umsetzen und testen bevorich mir ein Urteil erlaube....obwohl ich davon überzeugt bin, dass es super funktioniert.

bis später!
Und nochmals DANKE!
...