1 1 1 1 1 1 1 1 1 1 Rating 5.00 (3 Votes)
   
 

 

Problemstellung:

Beispiel-DB für eine Userverwaltung mit verschlüsselten Passwörtern und individuiellen
verschlüsselten Formularrechten

Voraussetzungen:

Das Bsp ist ab A00 lauffähig.

-tk_User_FormRights_Master00.mdb, das Admin Tool zur Verwaltung der Rechte
müssen sich im Verzeichnis „C:\User_FormRights“ befinden
-tk_UserFormRights00_FE.mde, das Frontend für das Bsp
-tk_UserFormRights00_FE.mdb, das Frontend für das Bsp (nur für die Sichbarkeit des Codes)
müssen sich im Verzeichnis „C:\User_FormRights\Frontend“ befinden
-tk_UserFormRights00_BE.mdb, das Backend für das Bsp
müssen sich im Verzeichnis „C:\User_FormRights\Backend“ befinden
- CrypterV2.dll enthält die Ver- und Entschlüsselungsalgorithmen sowie die Routinen zum schreiben
und lesen der Rechte in die FS-Datei, diese Datei wird während der Installation in das
WinSys-Dir kopiert und registriert. Bei der Deinstallation wird die Datei automatisch mit entfernt.
Diese DLL ist eine ActiveX-DLL in VB6 geschrieben.

Die Grundidee des FileSystems innerhalb einer Datei stammt von Ralph Steinkönig (Lordchen) und
der Code hier im  Bsp von Sven Herzky (E7), s. hier

 

Die Funktionsweise von „AutoLogOff“ und der Anmeldung der User mittels verschlüsselter Passwörter
wird nicht weiter beschrieben. Genaue Anleitung dazu s. hier:

Grundidee:

Es soll eine Möglichkeit geschaffen werden, Formularrechte für einzelne User zu vergeben
ohne das Sicherheitssystem von Access zu verwenden.
Die jeweilige Rechte sollen aber nicht in einer Tabelle gespeichert werden, deshalb habe ich das
FileStorageSystem innerhalb einer Datei von Sven Herzky gewählt.
Schematisches Aussehen z.B.:


Jeder User ist ein Verzeichnis und jedes Formular ein Unterverzeichnis.
Im Formularverzeichnis wird derverschlüsselte Wert für die Rechte des Formulars gespeichert.

Alle Formularnamen und Rechte-Werte werden verschlüsselt gespeichert. z.B.:

1. Funktionsweise des Admin Tools:

Es ist möglich mit dem Admin Tool mehrere Rechte-Systeme zu verwalten.
Achtung:
Es ist aber erforderlich das in allen FE’s bzw. BE’s die Tabelle tbl_User
und die Formulare frm_User_anmelden, frm_User_Passwort_Neu und frm_Userstamm
in unveränderter Form vorhanden sind.


 Benötigte Angaben im Startform der „tk_User_FormRights_Master00.mdb“:

Projekt ID:  wird automatisch vergeben
Projekt Name: eine beliebige Bezeichnung für das Projekt
Pfad des FileSystems: Auswahl des Pfades in dem die Filesystem-Datei erstellt werden soll
(Am besten im gleichen Verzeichnis in dem sich das BE befindet.
Auf jeden Fall müssen alle FE’s darauf Zugriff haben)
Name des FileSystems: Eingabe des Dateinamens des FileSystems
Pfad des Frontends: Auswahl des Frontends
Pfad des Backends: Auswahl des Backends
Property gesetzt? Der Name und der Pfad der FileSystem-Datei wird in einer benutzerdefinierten
Property im Backend gespeichert. Die Checkbox zeigt an ob diese Property
bereits gesetzt wurde.
Name des FileSystems:  liest den Wert der Property aus dem Backend zur Kontrolle aus.


Im 1. Registerblatt besteht dann die Möglichkeit alle im Frontend enthaltenen Formulare einzulesen.
Mit einem Klick auf den Button „Formulare neu einlesen“ kann zu jeder Zeit die Anzeige aktualisiert
werden, wenn neue Formulare hinzu gekommen sind oder entfernt wurden.

Im 2. Registerblatt erfolgt die Zuweisung der Formularrechte für den jeweiligen User.

Der Button „Form <=> User Erstellen“ erstellt für alle vorhandenen User die Rechte-Tabelle.
Danach wird im Kombifeld „User auswählen“ der jeweilige User ausgewählt und alle,
im Frontendvorhandenen Forms gelistet.
Dort können dann die Rechte vergeben werden.
Zur Auswahl stehen:

Keine Auswahl
Formular kann von User nicht geöffnet werden
Full voller Formularzugriff (Lesen, Schreiben, Löschen und Hinzufügen)
Read Only nur Lesen
Write Schreiben
Delete Löschen
Add Hinzufügen

 

 

Es können alle Rechte miteinander kombiniert werden, wobei das Programm unsinnige
Kombinationen ignoriert. z.B.: Full und Read Only usw.
Das Programm wandelt später diese Eingaben in Zahlenwerte um, die dann in das FileSystem geschrieben werden.
Die 3 Listenfelder, die sich auch auf dem Registerblatt befinden,
zeigen bei Bedarf neue Formulare an, die sich im Frontend
befinden, und noch nicht erfasst wurden. Auch werden Formulare angezeigt die sich nicht mehr im
Frontend befinden aber  noch im Rechte-System vorhanden sind.
Desweiteren werden neue User angezeigt für die noch keine Rechte vorliegen.
Alle Listenfelder dienen nur zur Information. Um das System zu aktualisieren muss nur der Button
„Formulare und User aktualisieren“ betätigt werden.
Dann werden alle Informationen aktualisiert.
Nach jeder Änderung, egal ob ein einzelnes Recht oder neuer User usw. muss mittels Button
„UserSystem erstellen“ das FileSystem neu geschrieben werden. Dies kann auch dann erfolgen
wenn bereits User angemeldet sind.

Funktionsweise der Funktion CreateFS():

Zuerst werden in der Abfrage qry_SetFlag die erforderlichen Rechte-Werte ermittelt und auf Plausibilität
geprüft und bei Bedarf angepasst.
Im nächsten Schritt wird für jeden User ein Verzeichnis im FS-System angelegt in dem wiederum für
jedes Formular ein weiteres Unterverzeichnis angelegt wird.
Die Userverzeichnisse erhalten als Namen den Präfix „User_“ und die ID, also z.B.: User_1
Der Formularname erhält den Präfix „FormFlag_“ und wird mittels CRC32 und Hex Funktion umgewandelt,
z.B.: FormFlag_5390E3FD.
Die Funktion CRC32Unicode befindet sich in der Klasse CRC32Class der CrypterV2.dll
Danach wird in jedem Formularunterverzeichnis eine Datei mit dem Namen „FormWert“ angelegt.
Diese enthält in verschlüsselter Form den errechneten Rechte-Wert.
Die Verschlüsselung wird durch folgende Rechnung erzielt:
Rechtewert + CRC32-Wert des Formularnamens * -1 (*-1, da der CRC32-Wert negativ ist)
Die eigentliche Verschlüsselung wird von der Funktion „Encrypt“ aus der Klasse „Crypter“
der CrypterV2.dll vorgenommen.
Als Passwort wird die Kennung des Users übergeben.
Crypter.Encrypt(rstOut!Wert + crc32.CRC32Unicode(rstOut!FormName) * -1, strKennung)

Das Ergebnis des Rechte-Wertes sähe dann z.B. so aus „epbppdjmhheonoenpgfbgc“
Da immer der CRC32 Wert des Fomularnamens verwendet wird erscheint, auch bei gleichen Rechten,
nie der gleiche Rechte-Wert in der FS-Datei.

Ein neues FileSystem wird wie folgt angelegt.
Bitte Hinweise oben beachten. (benötigte Angaben)

1. Eingabe des Projektnamens
2. Auswahl des Zielverzeichnisses für die FS-Datei
3. Name der FS-Datei
4. Auswahl des Frontends
5. Auswahl des Backends
6. Setzen der Property für den FS-Pfad im Backend
7. Einbinden der Usertabelle (nur erstmalig bei Neueingabe erforderlich. Tabelle wird später dann
automatisch neu eingebunden bei Projektwechsel)
8. FS-Pfad aus Property zur Kontrolle auslesen
9. Alle Formulare des Frontends einlesen
10. Eingabe der Rechte für jeden User
11. FS-System erstellen (UserSystem)

2. Funktionsweise im Frontend:

Funktionsweise für die User-Anmeldung im Frontend s. hier:

 

Zum Formular öffnen wird die „DoCmd.OpenForm-Methode“ ersetzt.
Der Aufruf erfolgt durch die Sub „FormOpen“ im Modul mod_FormOpenRights.
Dieser Sub werden 2 Werte übergeben. Der Name des Forms und der Rechtewert.
Um den Rechtewert zu erlangen ist eine weitere Funktion erforderlich, „GetFormRightValue“
auch aus dem Modul mod_FormOpenRights.
Dieser Funktion müssen 4 Parameter übergeben werden:

intUser = ID des aktuellen Users

strFS_Path = Pfad der FileSystem-Datei

strFormName = Name des zu öffneten Formulars

strKennung = Kennung des aktuellen Users

Der strFormName wird direkt der Formulaname übergeben
Den Parametern intUser und strKennung erhalten ihre Werte direkt aus dem Startform
(Wichtig: Deshalb muss das Startform immer im Hintergrund geöffnet sein. Soll aus einem anderen
Formein anderes Form geöffnet werden, ist auf die entsprechenden Felder des Startforms zu verweisen)

Der etwas kompliziertere Teil ist die Ermittlung des Pfades der FS-Datei für strFS_Path.
Da der Pfad in einer Property des Backends gespeichert ist muss erstmal der Pfad des Backends
ermittelt werden.
Dies erfolgt im Load-Ereignis des Startforms.

Private Sub Form_Load()
Dim strBEPath As String
' ermittelt den BE Pfad
 strBEPath = GetToken(ReadConnectPath("tbl_User"), 2, "=")
  ' ermittelt den Pfad der FS-Datei
 strFSPath = GetProp(strBEPath, "FileSystemPath")
End Sub


Die Zeile strBEPath = GetToken(ReadConnectPath("tbl_User"), 2, "=") liest den Connectstring der
Tabelle tbl_User aus und extrahiert daraus den Pfad.
Danach wird in der Zeile strFSPath = GetProp(strBEPath, "FileSystemPath") die Property mit Pfad
der FS-Datei gelesen.

Die Funktion „GetFormRightValue“ holt dann den Rechte-Wert des angegebenen Formulars für
den aktuellen User aus der FS-Datei und entschlüsselt ihn.
Codeauszug:

Dim varCryptForm As Variant, strFormValue As String
Dim varDecryptValue As Variant, varCRC32Form As Variant
varCryptForm = Hex$(crc32.CRC32Unicode(strFormName))
With oFileSystem
     .OpenFS strFS_Path
     strFormValue = .ReadFile("User_" & intUser & "/" & "FormFlag_" & varCryptForm,"FormWert")
     varDecryptValue = Crypter.Decrypt(strFormValue, strKennung)
     varCRC32Form = crc32.CRC32Unicode(strFormName) * -1
      GetFormRightValue = varDecryptValue - varCRC32Form
End With

 

varCryptForm = Hex$(crc32.CRC32Unicode(strFormName))

Zuerst wird auch hier der Formularname mittels CRC32 und Hex Funktion umgewandelt.
Dies ist zur Angabe des richtigen Unterverzeichnisses in der FS-Datei erforderlich.

OpenFS strFS_Path
strFormValue = .ReadFile("User_" & intUser & "/" & "FormFlag_" & varCryptForm, "FormWert")

Dann wird das Verzeichnis in der FS-Datei geöffnet und der verschlüsselte Rechte-Wert ausgelesen.

varDecryptValue = Crypter.Decrypt(strFormValue, strKennung)
varCRC32Form = crc32.CRC32Unicode(strFormName) * -1
GetFormRightValue = varDecryptValue - varCRC32Form

Zum Schluss erfolgt dann die Entschlüsselung des Wertes.

Um nun z.B. das Formular frm_Userstamm zu öffnen würde der Aufruf so aussehen:

Private Sub btn_User_Click()
    FormOpen "frm_Userstamm", GetFormRightValue(Me.txt_User_ID, strFSPath, "frm_Userstamm", Me.User_Kennung)
End Subalue - varCRC32Form
End With


Hinweis: Derzeit ist es nicht möglich für Unterformulare eigene Rechte zu nutzen. UFO’s erben die Rechte
des jeweilen Hauptformulars.
Vergebene Rechte im Admin-Tool werden ignoriert.

Wie kann ich das in der Praxis nutzen?

- Zur Verwaltung der Rechte-Projekte wird die tk_User_FormRights_Master00.mdb benötigt.
- Im Backend muss die Tabelle tbl_User in vorliegender Form vorhanden sein und in das Frontend eingebunden werden.
Diese Tabelle kann erweitert werden aber die die vorhandenen Felder dürden in ihrere Struktur nicht verändert werden.
DieTabelle tbl_AutoLogOff ist nur erforderlich wenn die AutoLogOff-Funktion genutzt werden soll.
- Das Frontend muss folgende Objekte enthalten:
Die eingebundenen Tabellen tbl_User und bei Bedarf tbl_AutoLogOff.
Die Abfrage qry_Filter_logon
Die Formulare frm_User_anmelden, frm_User_Passwort_Neu
Die Formulare frm_PW_Return und frm_Userstamm werden nur benötigt wenn die Userverwaltung aus dem Frontend erfolgen soll und nicht aus dem Admin-Tool.
Soll die AutoLogOff-Funktion genutzt werden sind die Formulare frmAutoLogOff und
frmAutoLogOffMsgBox
nötig sowie das Markro Autoexec.
Die Module mod_FormOpenRights, mod_Funktionen und mod_Properties sind ebenfalls mit zu übernehmen.
Die
CrypterV2.dll muss per Verweis in das FE eingebunden werden.
Auf einem anderen Rechner ist diese DLL auch mittels Regserv32 zu registrieren.


Zusammenfassung

Diese Bsp-DB erhebt nicht den Anspruch auf Vollständigkeit und auch nicht vollständige Sicherheit.
Der Urheber haftet nicht für eventuell auftretende Datenverluste oder sonstige Schäden
durch diese Bsp-Datenbank oder deren auszugweisen Nutzung.
 

 

Dateien:
(0 Stimmen)

Beispiel-DB für eine Userverwaltung mit verschlüsselten Passwörtern und individuellen verschlüsselten Formularrechten.

ab A00

Die Setup-Datei enthält eine Version ab A00

Datum 05.02.2018
Dateigröße 632.44 KB
Download 3.390

Ähnliche Artikel

Kommentar schreiben

Sicherheitscode
Aktualisieren

Login Form

1.png1.png9.png3.png1.png8.png2.png
Heute55
Gestern56
Diese Woche111
Dieser Monat1241
Total1193182

  • IP: 54.81.78.135
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

1
Online

22. Mai 2018