J'essaie de modéliser un module d'authentification utilisateur pour une base de données MS SQL Server qui sera le back-end d'une application d'interface utilisateur Delphi. Fondamentalement, je veux avoir des comptes d'utilisateurs où l'utilisateur appartient à un seul groupe. Un groupe peut avoir "n" nombre de droits.
Je souhaite également ajouter l'historique des mots de passe à la base de données, car l'utilisateur devra modifier son mot de passe en fonction d'un paramètre d'application (par exemple, tous les 90 jours).
Je souhaite également enregistrer un événement à chaque fois qu'un utilisateur se connecte et se déconnecte. Je peux étendre cela à d'autres événements à l'avenir.
Ci-dessous, vous y trouverez ma première fissure. Veuillez me faire part de vos suggestions pour l'améliorer, car c'est la première fois que je fais cela.
Voyez-vous le besoin d'attributs supplémentaires pour la sécurité basée sur les rôles et les contraintes pour les règles de mot de passe / périodes d'expiration?
la source
Réponses:
En fonction de vos exigences déclarées, votre modèle est en assez bonne forme.
Voici quelques suggestions d'amélioration:
Vous ne le dites pas explicitement, il est donc difficile de le dire - mais il semble que vous stockiez directement le mot de passe de l'utilisateur. Ce serait très mauvais! Si vous regardez les bases de données d'authentification courantes, les mots de passe sont stockés sous forme cryptée. Vous voyez souvent à la fois une
password
colonne et unepassword_salt
colonne.Votre
USER_LOGS
table a uneEvent
colonne. Vous ne savez pas comment cela doit être rempli. Devrait-il y avoir unEVENT_TYPE
tableau qui fasseUSER_LOGS
référence? Cela pourrait rendre les rapports plus conviviaux. Les événements typiques incluent la connexion, la déconnexion, l'échec du mot de passe, le changement de mot de passe, la réinitialisation du mot de passe, le verrouillage, le déverrouillage, ...Votre
GROUP_RIGHTS
tableau n'indique pas qui a accordé les droits. À des fins de piste d'audit, les gens gardent souvent un journal de qui a changé quoi et quand. Ce n'est peut-être pas un problème pour vous.Voici quelques questions concernant vos exigences commerciales déclarées, qui diffèrent du modèle de sécurité basé sur les rôles "manuel" de deux manières:
Voulez-vous vraiment que les utilisateurs appartiennent à un seul groupe? L'avantage de la sécurité basée sur les rôles est que les rôles ont tendance à être assez statiques, tandis que les personnes remplissant les rôles vont et viennent assez souvent. Cela inclut que certaines personnes "portent souvent deux chapeaux".
Votre conception est uniquement subventionnée. Certains systèmes incluent l' octroi et la révocation . Cela vous permet de dire qu'un droit largement disponible n'est pas disponible pour un groupe particulier.
Vous avez des utilisateurs et des comptes comme
USERS
dans votre conception. Il existe souvent une distinction entre les personnes et les ID utilisateur . Certains ID utilisateur sont destinés à des équipes ou des machines et certaines personnes ont plusieurs ID utilisateur à des fins différentes. Est-ce une distinction qui vous serait utile?la source
Je pense que les opérateurs au niveau du bit sont le meilleur moyen de mettre en œuvre l'autorisation utilisateur. Ici, je montre comment nous pouvons l'implémenter avec Mysql.
Voici un exemple de tableaux avec quelques exemples de données:
Tableau 1 : table des autorisations pour stocker le nom de l'autorisation avec un bit comme 1,2,4,8..etc (multiple de 2)
Insérez quelques exemples de données dans le tableau.
Tableau 2 : Tableau utilisateur pour stocker l'ID utilisateur, le nom et le rôle. Le rôle sera calculé comme la somme des autorisations.
Exemple:
Si l'utilisateur 'Ketan' a l'autorisation de 'User-Add' (bit = 1) et 'Blog-Delete' (bit-64), le rôle sera donc 65 (1 + 64).
Si l'utilisateur «Mehata» a l'autorisation de «Blog-View» (bit = 128) et «User-Delete» (bit-4), le rôle sera donc 132 (128 + 4).
Exemples de données-
Autorisation de dépôt de l'utilisateur Après la connexion si nous voulons charger l'autorisation de l'utilisateur, nous pouvons interroger ci-dessous pour obtenir les autorisations:
Ici user.role "&" permission.bit est un opérateur Bitwise qui donnera la sortie comme -
Si nous voulons vérifier la météo, un utilisateur particulier a la permission de modifier ou non
Sortie = Aucune ligne.
Vous pouvez également voir: http://goo.gl/ATnj6j
la source