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

 MySQL Discussion :

Limiter l'accés aux données.


Sujet :

MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 61
    Points : 57
    Points
    57
    Par défaut Limiter l'accés aux données.
    Bonsoir,

    J'ai une problématique de limitation d'accés aux données d'une table...

    J'ai par exemple une base de données contenant une table produit.
    J'ai trois utilisateurs Admin, Pierre et Paul qui créent des produits.

    Comment faire pour qu'Admin puisse voir tous les enregistrements de la table produit, et que Pierre et Paul ne voient que les enregistrements qu'ils ont créé ?

    Merci pour votre aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 61
    Points : 57
    Points
    57
    Par défaut
    Je me réponds à moi même au cas ou d'autres auraient la même interrogation.
    Tout est décrit ici :

    http://blog.developpez.com/sqlpro/p9...ou_plusieurs_1

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 377
    Points : 19 049
    Points
    19 049
    Par défaut
    Salut achestyx.

    Le lien que tu donnes concerne Microsoft SQL Server et non MySql.

    Pour résoudre ton problème, il faut pour cela utiliser des view.
    Comment procéder ?
    Dans chaque ligne, il faut ajouter une colonne permettant d'identifier l'utilisateur/créateur de la ligne.
    Lors de la création de la view, il suffit de faire une restriction sur l'utilisateur comme ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE VIEW vue AS
      SELECT user, champ
      FROM test
      WHERE user = USER();
    Bien entendu, ceci est necessaire mais pas suffisant.
    Il faut aussi attribuer des permissions aux utilisateurs, comme ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    use base;
     
    -- ========================
    -- Création des permissions
    -- ========================
     
    drop user   'user1'@'localhost';
    drop user   'user2'@'localhost';
     
    create user 'user1'@'localhost';
    create user 'user2'@'localhost';
     
    grant usage on *.* to 'user1'@'localhost';
    grant usage on *.* to 'user2'@'localhost';
     
    grant select,insert,update,delete on `base`.`vue` to 'user1'@'localhost';
    grant select,insert,update,delete on `base`.`vue` to 'user2'@'localhost';
     
    SET PASSWORD FOR 'user1'@'localhost' = PASSWORD('');
    SET PASSWORD FOR 'user2'@'localhost' = PASSWORD('');
     
    exit
    Ainsi, un utilisateur de nom "user1" aura accès uniquement aux lignes ayant dans la colonne sont user, c'est-à-dire "user1".
    Pour l'utilisateur ADMIN, il suffit de lui donner un accès total sur la table et non sur la vue.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #4
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour à tous

    Je suis intéressé par l'utilisation de vues.
    Dans le cas présent, quel serait l'intérêt d'utiliser une vue, plutôt que directement la requête select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT user, champ
      FROM test
      WHERE user = USER();
    Pierre

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 377
    Points : 19 049
    Points
    19 049
    Par défaut
    Salut pier.antoine.

    Citation Envoyé par pier.antoine
    quel serait l'intérêt d'utiliser une vue, plutôt que directement la requête select
    L'intérêt concerne les permissions que l'on accorde à un utilisateur sur une partie des données d'une table.
    Avec un select, tous les utilisateurs peuvent voir la totalité de la table.
    Avec une view, vous pouvez restreindre les accès à une partie des données pour chaque catégorie des utilisateurs.

    Dans cet exemple, la restriction est basée sur l'utilisateur. Mais tout le monde ne verra pas la même chose.

    Mais vous pouvez créer des view basées sur un autre critère, par exemple les services de l'entreprise.
    Et autoriser l'accès d'une view pour un service et l'interdire pour les autres services, en passant par les permissions (grant).
    Je m'avance un peu trop car je croix qu'avec MySql, les rôles n'existent pas encore, comme sous FireBird.

    Qu'est-ce que vous essayez de faire ? Donnez un exemple.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 126
    Points : 38 509
    Points
    38 509
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Je m'avance un peu trop car je croix qu'avec MySql, les rôles n'existent pas encore, comme sous FireBird.
    En effet, avec MySQL, contrairement à d'autres SGBD le type d'objet concerné par un GRANT est TABLE, PROCEDURE ou FUNCTION, donc pas de solution via les vues
    Ref : http://dev.mysql.com/doc/refman/5.7/en/grant.html

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 377
    Points : 19 049
    Points
    19 049
    Par défaut
    Salut Escartefigue.

    Ne dis pas n'importe quoi. On peut mettre une permission sur une view.
    Dans cet exemple, la view se nomme "vue". Je sais, ce n'est pas très original.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grant select on `base`.`vue` to 'user1'@'localhost';
    J'attribue la permission select sur la vue pour l'utilisateur "user1" en "localhost" uniquement.

    Je parlais des rôles, c'est-à-dire définir un groupe d'utilisateurs qui ont tous les mêmes permissions.
    On travaille avec le rôle du groupe et non avec chaque utilisateur.
    Cela évite d'avoir à le faire pour chaque utilisateur.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Pour répondre à Artemus24, je n'ai pas de besoin particulier.
    Je me suis déjà servi des vues, à l'époque où je ne maîtrisais pas les sous-requêtes.

    Comme pour le moment, je me contente de base à utilisateur unique....

    Pierre

  9. #9
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 377
    Points : 19 049
    Points
    19 049
    Par défaut
    Salut Pier.antoine.

    Si un jour, tu as un problème spécifique, je pourrais le tester chez moi et te communiquer ma solution.
    Mais avant tout, il faudra expliquer ce que tu cherches à faire.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Limiter l'accès aux données d'une base via mot de passe
    Par wolfens77 dans le forum Sécurité
    Réponses: 1
    Dernier message: 10/02/2012, 15h37
  2. [SGBD]Optimiser le temps d'accès aux données (schéma BD)
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 08/10/2004, 18h33
  3. [débutant] avoir accès aux données de la base BCDI 3
    Par Valichou dans le forum Bases de données
    Réponses: 7
    Dernier message: 06/05/2004, 13h13
  4. accès aux donnée d'un DBGRID
    Par relax_06 dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/03/2004, 23h06
  5. [TDataModule] Intérêt de séparer les accès aux données?
    Par Cornell dans le forum Bases de données
    Réponses: 5
    Dernier message: 05/09/2003, 16h42

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