IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Séparation des enregistrement par groupe d'utilisateurs (domaine ?)


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 23
    Points
    23
    Par défaut Séparation des enregistrement par groupe d'utilisateurs (domaine ?)
    Bonjour,

    J'ai une application qui travaille avec une base de données ayant plusieurs tables. Mon application va être utilisée par plusieurs groupes distincts de personnes.

    Solution 1 : plusieurs instances de mon appli et plusieurs BDD avec la même structure, mais dans chaque BDD, les données d'un groupe

    Solution 2, si ça existe : une seule instance de mon appli, une seule BDD, mais un moyen de spécifier l'ensemble des enregistrements qui concerne l'utilisateur courant.

    C'est possible ? Il me semble qu'il y a une notion comme ça, mais impossible de retrouver ....

    Merci pour votre aide,

    Xavier

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si je comprends bien, tu as l'une des règles de gestion suivantes :
    1) Un utilisateur appartient à un seul groupe et un groupe peut comprendre plusieurs utilisateurs.
    2) Un utilisateur appartient à un ou plusieurs groupes et un groupe peut comprendre plusieurs utilisateurs.

    Ce qui donne les MCD (methode Merise) suivants :
    1) utilisateur -1,1----appartenir----0,n- groupe
    2) utilisateur -1,n----appartenir----0,n- groupe

    Il en découlera dans ta BDD les tables suivantes :
    1)
    groupe (grp_id, grp_nom...)
    utilisateur (uti_id, uti_id_groupe, uti_nom...)

    2)
    groupe (grp_id, grp_nom...)
    utilisateur (uti_id, uti_nom...)
    uti_appartenir_grp (uag_id_utilisateur, uag_id_groupe)

    Ensuite, tu peux avoir une notion de droits attribués aux groupes, selon le schéma suivant :
    groupe -1,n----bénéficier----0,n- droit

    Ce qui donne les tables :
    droit (drt_id, drt_libelle...)
    grp_beneficier_drt (gbd_id_groupe, gbd_id_droit)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Si je comprends bien la question, au lieu de donner des droits sur les tables de la base, crée des vues et donnes les droits qui vont bien sur les vues. Ainsi les utilisateurs ne peuvent voir que les enregistrements renvoyés par les vues sur lesquelles ils ont un droit de lecture.

    Tatayo.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 23
    Points
    23
    Par défaut
    Bonjour Philippe,

    En fait, ma question ne porte pas sur la gestion des utilisateurs, groupes et droits, ça, ça n'est pas un problème.

    Je cherche à "cloisonner" les autres données (enregistrements) de la base selon l'utilisateur connecté.

    Je vais essayer de prendre un exemple. Imaginons une application qui permet de gérer des événements pour une association. Chaque utilisateur appartient à une association et ne doit voir que les événements de sons association.

    Bien sûr, je pourrais le faire en liant chaque événement à une association et en faisant des requêtes selon l'association de l'utilisateur en cours. Mais mon application comporte de nombreuses tables, et ça alourdi considérablement ...

    Mais je me demande s'il n'y a pas une fonctionnalité plus "forte" dans les base de données permettant de définir un système de "domaine" (c'est le mot qui me vient mais je ne suis pas sûr que ce soit le bon), permettant de filtrer les enregistrements de toutes les tables de façon assez transparente (sans les avoir dans toutes les requêtes).

    J'espère être un peu plus clair ...

    Merci

    Xavier

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 23
    Points
    23
    Par défaut
    Bonjour Tatayo,

    Tous les utilisateurs ont accès aux mêmes vues. Ils utilisent la même application mais avec des jeux de données différents. Et je cherche à éviter de dupliquer mon application en plusieurs instance connectées à autant de bases de données ...

    Merci

    Xavier

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il faut que ton modèle de données prenne en compte cette séparation par groupe si tu veux que la même application interrogeant une seule BDD soit accessible pour tous les groupes.

    En complément de mon MCD, l'entité type groupe sera associée à au moins une autre entité type du reste du MCD, laquelle sera à son tour associée à au moins une autre entité type...
    Ainsi, en connaissant l'utilisateur, on connaît son groupe et on peut filtrer les données des tables issues du reste du schéma en fonction du groupe de l'utilisateur.

    Pour reprendre ton exemple de plusieurs associations, chaque utilisateur représentant une association pourrait voir la liste de ses adhérents mais pas les adhérents de l'association d'à côté.

    MCD :
    utilisateur -1,1----appartenir----0,n- association -0,n----avoir----1,1- adherent

    Tables :
    association (ass_id, ass_nom...)
    utilisateur (uti_id, uti_id_association, uti_nom...)
    adherent (adh_id, adh_id_association, adh_nom, adh_prenom...)

    Si je suis utilisateur de l'association 'ATB', je n'ai accès qu'aux membres de l'ATB avec cette requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT adh.adh_nom, adh.adh_prenom
    FROM adherent adh
    INNER JOIN association ass ON ass.ass_id = adh.adh_id_association
        INNER JOIN utilisateur u ON u.uti_id_association = ass.ass_id
    WHERE u.uti_nom = 'CinePhil'
    ORDER BY adh.adh_nom, adh.adh_prenom
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 23
    Points
    23
    Par défaut
    Re-bonjour Philippe,

    Grand merci pour tes réponses rapides.

    Encore une fois, gérer cela au travers de tables et de liens entre ces tables n'est pas un problème pour moi. Ma question est de savoir s'il n'y a pas une solution plus global au SGBD permettant en quelque sorte de lui dire "maintenant, pour cette session, je veux travailler sur cet ensemble de données, quelque soit les tables". Il me semble que ça existe. J'avais en tête la notion de "domaine", mais je crois que ça n'est pas le bon terme ....

    Merci

    Xavier

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    À ma connaissance non et à mon avis c'est plus simple de le modéliser que de le gérer hors SQL. Mais je ne connais que MySQL (assez bien), Postgresql (moins ben), Access (vielle version, vieux souvenirs), Open Office Base (assez peu) alors peut-être que d'autres SGBD savent faire ce genre de truc en quelques clics mais moi pas savoir.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 23
    Points
    23
    Par défaut
    Bon, je viens d'avoir un collègue en ligne, spécialiste base de données, à qui ça ne dit rien ...

    J'ai du rêvé, dommage ...

    En tout cas, merci pour vos réponses !

    Xavier

  10. #10
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Xnopre et CinePhil,

    En final, deux cas :

    • les tables sont, physiquement, les mêmes pour tous les "domaines" : pour des raisons évidentes de maintenance, c'est la solution la plus efficiente. L'ajout d'un champ est immédiatement valide pour tous les "domaines".
      Par exemple, les progiciels comptables qui gèrent plusieurs sociétés (plusieurs "domaines", donc), intègrent dans toutes les tables, le n° de la société. La navigation, dans une société, ne dérive pas dans une autre société, sauf si l'utilisateur veut changer de société.
      ==> la solution de CinéPhil convient parfaitement à ce cas.

    • les tables ne sont pas, physiquement, les mêmes (stockées à des endroits différents, donc). L'ajout d'un champ devra s'effectuer à tous les endroits de stockage.
      La problématique devient donc de "variabiliser" le chemin pour arriver aux bonnes tables suivant un paramètre d'entrée. Cela dépend donc des systèmes :
      • répertoires, serveurs, etc... (orientation "physique") ;
      • bases de données (orientation "logique"). Par exemple, sous SQL Server, il peut y avoir plusieurs bases de données (dans le "même SQL Server"). Je suppose que l'ouverture des tables de l'une ou de l'autre doit être paramétrable : le forum SQL Server pourrait nous donner facilement la réponse.

      ==> la question est donc de "variabiliser" l'accès logique aux tables.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

Discussions similaires

  1. TOTAL des enregistrements par table
    Par LDDL dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/03/2007, 14h17
  2. Limiter le nombre d'enregistrements par groupe
    Par atoff dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2007, 09h26
  3. dernier enregistrement par group by
    Par startout dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/07/2006, 16h05
  4. Récupérer des enregistrements par tranche horaire
    Par olive_le_malin dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 19/05/2006, 16h53
  5. compter des enregistrement par SQL
    Par 973thom dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/11/2004, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo