J'ai un modèle de base de données avec une table d'utilisateurs et une table de rôles. Je souhaite contrôler l'accès (droits) à 10 éléments différents au maximum. L'accès peut être accordé à un rôle ou à un seul utilisateur. Vous trouverez ci-dessous la définition du tableau des utilisateurs, rôles et éléments:
CREATE TABLE users
(
id serial NOT NULL PRIMARY KEY,
username character varying UNIQUE,
password character varying,
first_name character varying,
last_name character varying,
...
);
CREATE TABLE roles
(
id serial NOT NULL PRIMARY KEY,
name character varying NOT NULL,
description character varying,
...
);
CREATE TABLE element_1
(
id serial NOT NULL PRIMARY KEY,
name character varying NOT NULL,
description character varying,
...
);
...
J'ai maintenant deux manières différentes de concevoir les droits. Une table avec une colonne de type de droits ou 10 tables de droits, une pour chaque élément pour lequel je souhaite contrôler l'accès.
Quels sont les avantages et les inconvénients d'une table de droits par rapport à une table de droits par élément? - ou est-ce un moyen plus approprié de le faire?
database-design
best-practices
Taudorf
la source
la source
Réponses:
Tout d’abord, quel type de modèle de sécurité envisagez-vous de mettre en œuvre? Contrôle d'accès basé sur les rôles (RBAC) ou contrôle d'accès discrétionnaire (DAC)?
voir la source
1) Dans RBAC: vous avez besoin de la table ElementType pour attribuer des droits au rôle (les utilisateurs sont affectés à un ou plusieurs rôles). RBAC définit: "Que peut faire ce rôle / utilisateur". L'administrateur attribue des droits pour les rôles et des autorisations pour les rôles, attribue aux utilisateurs des rôles pour accéder aux ressources. 2) Sous DAC: les utilisateurs et les rôles ont des droits sur les éléments via la liste de contrôle d'accès (propriété). DAC définit: "qui a accès à mes données". Utilisateur (propriétaire) accorde des autorisations à la ressource possédée.
De toute façon, je suggère ce modèle de données:
(une à une relation)
1) RBAC (relation plusieurs à plusieurs)
2) DAC (relation plusieurs à plusieurs)
la source
Avec une table de droits pour chaque élément, dès que vous ajoutez un élément, vous devez ajouter une table. Cela ajouterait à la maintenance de l'application.
L'inconvénient de tout mettre dans une seule table est que vous pouvez rencontrer des problèmes de dimensionnement, mais que ceux-ci pourraient être atténués à l'aide du partitionnement, des vues matérialisées et / ou des colonnes virtuelles. De telles mesures ne seraient probablement pas nécessaires.
En ce qui concerne la conception de la table, si cela était sur Oracle, je pourrais suggérer quelque chose comme ceci:
Le code de package peut utiliser la séquence UserRoleID pour renseigner l'ID dans la table Users et l'ID dans la table Roles, si nécessaire. La table des autorisations peut alors avoir des éléments attribués à des rôles qui sont à leur tour attribués à des utilisateurs et / ou des éléments attribués directement à des utilisateurs.
la source