Ich versuche, ein Benutzerauthentifizierungsmodul für eine MS SQL Server-Datenbank zu modellieren, das das Back-End einer Delphi-UI-Anwendung ist. Grundsätzlich möchte ich Benutzerkonten haben, bei denen der Benutzer nur einer Gruppe angehört. Eine Gruppe kann "n" Rechte haben.
Ich möchte der Datenbank auch einen Kennwortverlauf hinzufügen, da der Benutzer sein Kennwort basierend auf einer Anwendungseinstellung ändern muss (z. B. alle 90 Tage).
Ich möchte auch jedes Mal ein Ereignis protokollieren, wenn sich ein Benutzer an- und abmeldet. Ich kann dies in Zukunft auf weitere Veranstaltungen ausweiten.
Unten findest du meinen ersten Riss. Bitte teilen Sie mir Verbesserungsvorschläge mit, da dies mein erstes Mal ist.
Sehen Sie einen Bedarf an zusätzlichen Attributen für die rollenbasierte Sicherheit und Einschränkungen für die Kennwortregeln / Ablaufzeiträume?
quelle
Antworten:
Basierend auf Ihren angegebenen Anforderungen ist Ihr Modell in einem ziemlich guten Zustand.
Hier einige Verbesserungsvorschläge:
Sie sagen das nicht explizit, daher ist es schwer zu sagen - aber es sieht so aus, als würden Sie das Benutzerkennwort direkt speichern. Das wäre sehr schlimm! Wenn Sie sich gemeinsame Authentifizierungsdatenbanken ansehen, werden Kennwörter in verschlüsselter Form gespeichert. Sie sehen oft sowohl eine
password
Spalte als auch einepassword_salt
Spalte.Ihre
USER_LOGS
Tabelle hat eineEvent
Spalte. Sie sind sich nicht sicher, wie diese Daten ausgefüllt werden sollen. Sollte es eineEVENT_TYPE
Tabelle geben, auf dieUSER_LOGS
verwiesen wird? Dies könnte zu einer freundlicheren Berichterstattung führen. Typische Ereignisse sind Anmelden, Abmelden, Kennwortfehler, Kennwortänderung, Zurücksetzen des Kennworts, Sperren, Entsperren usw.Ihre
GROUP_RIGHTS
Tabelle gibt nicht an, wer die Rechte gewährt hat. Zu Audit-Trail-Zwecken wird häufig protokolliert, wer wann welche Aufzeichnungen geändert hat. Das könnte für Sie kein Problem sein.Im Folgenden finden Sie einige Fragen zu Ihren angegebenen Geschäftsanforderungen, die sich in verschiedener Hinsicht vom rollenbasierten Sicherheitsmuster "Lehrbuch" unterscheiden:
Möchten Sie wirklich, dass Benutzer nur einer Gruppe angehören? Der Vorteil der rollenbasierten Sicherheit besteht darin, dass die Rollen in der Regel ziemlich statisch sind, während die Personen, die Rollen erfüllen, häufig ein- und ausgehen. Dazu gehört, dass manche Leute oft "zwei Hüte tragen".
Ihr Design ist nur förderfähig. Einige Systeme enthalten Erteilung und Widerruf . Dies erlaubt Ihnen zu sagen, dass ein weit verbreitetes Recht für eine bestimmte Gruppe nicht verfügbar ist.
Sie haben Benutzer und Konten wie
USERS
in Ihrem Entwurf festgelegt. Es wird häufig zwischen Personen und Benutzer-IDs unterschieden . Einige Benutzer-IDs sind für Teams oder Computer bestimmt, und einige Personen haben mehrere Benutzer-IDs für verschiedene Zwecke. Ist das eine Unterscheidung, die für Sie hilfreich wäre?quelle
Ich denke, bitweise Operatoren sind der beste Weg, um Benutzerrechte zu implementieren. Hier zeige ich, wie wir es mit MySQL implementieren können.
Unten finden Sie eine Beispieltabelle mit einigen Beispieldaten:
Tabelle 1 : Berechtigungstabelle zum Speichern des Berechtigungsnamens mit Bit wie 1,2,4,8..etc (Vielfaches von 2)
Fügen Sie einige Beispieldaten in die Tabelle ein.
Tabelle 2 : Benutzertabelle zum Speichern von Benutzer-ID, Name und Rolle. Die Rolle wird als Summe der Berechtigungen berechnet.
Beispiel:
Wenn der Benutzer 'Ketan' die Berechtigung 'User-Add' (Bit = 1) und 'Blog-Delete' (Bit-64) hat, ist die Rolle 65 (1 + 64).
Wenn der Benutzer 'Mehata' die Berechtigung 'Blog-View' (Bit = 128) und 'User-Delete' (Bit-4) hat, ist die Rolle 132 (128 + 4).
Beispieldaten-
Hinterlegen der Berechtigung des Benutzers Wenn wir nach dem Login die Benutzerberechtigung laden möchten, können wir unten nachfragen, um die Berechtigungen zu erhalten:
Hier ist user.role "&" permission.bit ein Bitwise-Operator, der die Ausgabe als - ausgibt.
Wenn wir das Wetter überprüfen möchten, hat ein bestimmter Benutzer die Berechtigung zum Bearbeiten des Benutzers oder nicht.
Ausgabe = Keine Zeilen.
Sie können auch sehen: http://goo.gl/ATnj6j
quelle