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

Langage PHP Discussion :

Droits de l'utilisateur MySQL pour l'insertion et la mise à jour


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Droits de l'utilisateur MySQL pour l'insertion et la mise à jour
    Bonjour,

    Voici mon problème (avec un exemple simplifié) :

    J'ai un formulaire avec 4 champs, (Nom, Prenom, Age, Sexe). L'insertion dans la base de données s'effectue correctement, avec la Requête ci-dessous.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Requete="INSERT INTO $Nom_table (`Nom`,`Prenom` ,`Age` ,`Sexe`) VALUES ('$Nom', '$Prenom', '$Age', '$Sexe');";	
    $Result=mysql_query($Requete,$connexion);

    Maintenant, j'ai créé deux utilisateurs via phpmyadmin.

    Un utilisateur qui a les droit d'insertion sur Nom, Prenom et un qui a les droit d'insertion sur Age et Sexe.

    Code mysql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GRANT INSERT( `Nom` , `Prenom` ) ON `base`.`t_stagiaires` TO 'user1'@'localhost';
     
    GRANT INSERT( `Age` , `Sexe` ) ON `base`.`t_stagiaires` TO 'user2'@'localhost';

    J'ai créé une page de login qui permet l'identification des user en fonction de ceux créés dans phpmyadmin.

    Le problème qui m'est posé est que lorsque je veux insérer dans la base avec user1 par exemple je vai sur la page de mon formulaire d'enregistrement je renseigne le nom et prénom mais un message d'erreur qui me dit que user1 n'a pas le droit d'INSERT sur champs Age et Sexe et inversement lorsque je renseigne juste Age et Sexe avec user2.

    Je comprend tout à fait pourquoi il y a ce message d'erreur mais je n'ai pas trouvé pas de solution pour résoudre ce problème, c'est pour cela que je me tourne vers vous.

    Si quelqu'un aurait une solutions se serait cool.
    Merci de vos réponses.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 355
    Points : 15 701
    Points
    15 701
    Par défaut
    essaye d'indiquer juste 2 champs :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Requete="INSERT INTO $Nom_table (`Nom`,`Prenom`) VALUES ('$Nom', '$Prenom');";    
    $Result=mysql_query($Requete,$connexion);

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si je comprends bien le mecanisme, c'est en fait que l'on puisse définir des droits d'insertion sur une colonne précise qui est fallacieux puisqu'une insertion requiert les droits sur tous les champs.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mathieu Voir le message
    essaye d'indiquer juste 2 champs :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Requete="INSERT INTO $Nom_table (`Nom`,`Prenom`) VALUES ('$Nom', '$Prenom');";    
    $Result=mysql_query($Requete,$connexion);
    En faite mon vrai formulaire contient 23 champs, donc si je dois faire plusieurs requête en fonction de l'utilisateur choisi, la gestion des utilisateurs dans mysql ne sert plus à rien alors si on code en dur que faire en fonction de user!

    C'est pour cela que je cherche une autre solution.


    Citation Envoyé par sabotage Voir le message
    Si je comprends bien le mecanisme, c'est en fait que l'on puisse définir des droits d'insertion sur une colonne précise qui est fallacieux puisqu'une insertion requiert les droits sur tous les champs.
    Oui voila c'est cela. Je pensais qu'en mettant des droits mysql sur les user, sa ne renseignerait que les champs autorisés, et ne renseignerait pas les autres !


    Pour info, c'est la première fois que j'utilise les droits mysql sur différents users.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Mais est ce que la proposition de mathieu fonctionne ?
    C'est à dire est ce que l'INSERT avec des droits partiels est possible ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Oui ceci fonctionne,

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Requete="INSERT INTO $Nom_table (`Nom`,`Prenom`) VALUES ('$Nom', '$Prenom');";    
    $Result=mysql_query($Requete,$connexion);

    Mais si je dois faire

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if($_SESSION['login'] == "user1")
    {
    $Requete="INSERT INTO $Nom_table (`Nom`,`Prenom`) VALUES ('$Nom', '$Prenom');";    
    $Result=mysql_query($Requete,$connexion);
    }
     
    else if($_SESSION['login'] == "user2")
    {
    $Requete="INSERT INTO $Nom_table (`Age`,`Sexe`) VALUES ('$Age', '$Sexe');";    
    $Result=mysql_query($Requete,$connexion);
    }

    je ne vois pas l'intéret de mettre des droits dans mysql alors qu'avec ce procéder on limite directement les mauvais insertions !

  7. #7
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 355
    Points : 15 701
    Points
    15 701
    Par défaut
    il y a peut-être une façon de faire mais je ne vois pas pourquoi tu aurais besoin de ça donc donne nous plus de détails sur les besoins et on pourra peut-être te proposer des autres solutions

  8. #8
    Invité
    Invité(e)
    Par défaut
    En faite, j'ai mis au point une base de données commune à plusieurs services.
    Cette base de données contient des informations sur des stagiaires.

    Chaques services renseigne des informations sur ces stagiaires via les formulaires d'enregistrement et de moficiations de stagiaires.
    Mais chaques services ont des droits spécifiques sur les champs de la table stagiaires, ils ne peuvent pas tous renseigner le nom, seul user 1 le peut par exemple.

    C'est pour cela que j'ai mis en place les droits sur les différents champs de la table.

    De plus j'ai aussi utiliser ce procéder, car avec cette méthode on peut facilement administrer par la suite si on veut effectuer une évolution des droits des différents services.

  9. #9
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 355
    Points : 15 701
    Points
    15 701
    Par défaut
    je n'ai jamais utilisé ces droits dans ce cas là. je préfère utiliser du code PHP qui pourrait donner par exemple le droit du nombre maximum de caractères en fonction d'autres critères

    dans ton cas je pense que j'ai trouvé quelque chose qui peut t'intéresse :
    http://dev.mysql.com/doc/refman/5.0/fr/show-grants.html
    avec cette requête tu obtiens les droits de l'utilisateur courant et donc en analysant le texte tu peux retrouver automatiquement quelles colonnes sont accessibles par l'utilisateur connecté

  10. #10
    Invité
    Invité(e)
    Par défaut
    Merci pour ce lien, je vais me pencher dessus. Si je n'y arrive pas je me pencherai sur un codage en dur en PHP !

    Bonne nuit

  11. #11
    Invité
    Invité(e)
    Par défaut
    Comme tu l'a dit, les fonctions SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER; SHOW GRANTS FOR CURRENT_USER(); affichent bien les droits utilisateurs, mais les données ne sont pas utilisable à moins de faire une technique comme le scanf() en C++.

    Après avoir parcourus la doc MySQL je n'ai rien trouver de plus.

    Le truc qui méchappe, c'est pourquoi on peut gérer des droits sur des utilisateurs MySQL et puis qu'après on ne puisse bénéficier de ces droits en développement !

  12. #12
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 355
    Points : 15 701
    Points
    15 701
    Par défaut
    Citation Envoyé par jeanjean8501 Voir le message
    Comme tu l'a dit, les fonctions SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER; SHOW GRANTS FOR CURRENT_USER(); affichent bien les droits utilisateurs, mais les données ne sont pas utilisable à moins de faire une technique comme le scanf() en C++.
    ah ! j'ai essayé sur le serveur MySQL que j'ai sous la main et je retrouve bien la liste des colonnes
    qu'est ce que tu obtiens comme résultat quand tu lances la requête ?

  13. #13
    Invité
    Invité(e)
    Par défaut
    Lorsque j'effectue les différentes requêtes j'obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Grants for invite@localhost 
    GRANT SELECT ON *.* TO 'invite'@'localhost' IDENTIFIED BY PASSWORD '*DAE3B2D2167FEE31AC927E8A245E34BB78D68A1E'  
    GRANT SELECT ON `base_commune`.`t_stagiaires` TO 'invite'@'localhost'
    Dc pas franchement réutilisable selon moi

  14. #14
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 355
    Points : 15 701
    Points
    15 701
    Par défaut
    Citation Envoyé par jeanjean8501 Voir le message
    Dc pas franchement réutilisable selon moi
    c'est pas faux
    quand tu regardes les droits spéciaux donnés aux colonnes, tu donnes biens ces droits à l'utilisateur "invite@localhost" ?

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mathieu Voir le message
    quand tu regardes les droits spéciaux donnés aux colonnes, tu donnes biens ces droits à l'utilisateur "invite@localhost" ?
    Je ne comprend pas ?

    Comme ci dessus, les droits sont donnés via :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO 'invite'@'localhost'

  16. #16
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    Bonjour,

    Je me pose juste une question, envisage tu de créer tous les utilisateurs qui utilisent ton application .
    Si c'est le cas je ne crois pas que ça soit la bonne méthode, tu devra gérer les contrôles d'accès au niveaux application et non au niveau BDD.

  17. #17
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 355
    Points : 15 701
    Points
    15 701
    Par défaut
    Citation Envoyé par jeanjean8501 Voir le message
    Je ne comprend pas ?

    Comme ci dessus, les droits sont donnés via :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO 'invite'@'localhost'
    là je ne vois pas du tout le problème, chez moi j'ai une ligne de ce genre
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT INSERT (nom, prenom) ON `base`.`table` TO 'invite'@'localhost'
    si tu veux continuer sur cette voie, il faudra déplacer cette discussion dans le forum MySQL

    Citation Envoyé par aityahia Voir le message
    Bonjour,

    Je me pose juste une question, envisage tu de créer tous les utilisateurs qui utilisent ton application .
    Si c'est le cas je ne crois pas que ça soit la bonne méthode, tu devra gérer les contrôles d'accès au niveaux application et non au niveau BDD.
    je suis tout à fait d'accord, ça sera beaucoup plus souple de gérer les droits dans le code PHP

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par aityahia Voir le message
    Bonjour,

    Je me pose juste une question, envisage tu de créer tous les utilisateurs qui utilisent ton application .
    Si c'est le cas je ne crois pas que ça soit la bonne méthode, tu devra gérer les contrôles d'accès au niveaux application et non au niveau BDD.
    Je suis d'accord, que gérer sa niveau application serait beaucoup plus simple en effet.
    Mais le problème que j'exposai, c'est que je ne comprennai pas pourquoi on peut donner des droits mysql si on ne peut pas réutiliser ces même droits dans une application.

    Citation Envoyé par mathieu Voir le message
    si tu veux continuer sur cette voie, il faudra déplacer cette discussion dans le forum MySQL
    Je pense qu'en effet il faudrait déplacer ce sujet (mais je ne sais comment faire), juste pour avoir plus d'informations sur l'utilité de ces droits MySQL !

  19. #19
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    Citation Envoyé par jeanjean8501 Voir le message
    Mais le problème que j'exposai, c'est que je ne comprennai pas pourquoi on peut donner des droits mysql si on ne peut pas réutiliser ces même droits dans une application.
    Un serveur MySQL peut contenir plusieurs bases de données, chacune d'elle est utilisé par une ou plusieurs applications et appartiennent a différents utilisateurs, c'est la qu'intervient le rôle des droits utilisateur.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Oui je sais bien, mais c'est que je ne vois pas l'intéret de limiter des droits sur des champs de table alors que les restrictions sont gérer dans le code de l'application.

    A moin que ce soit une double sécurité pour éviter les piratages !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/09/2009, 13h30
  2. Réponses: 0
    Dernier message: 04/09/2009, 03h30
  3. Problème pour Comparer 2 Datatables et mise à jour
    Par Jean-Marc68 dans le forum C#
    Réponses: 4
    Dernier message: 21/11/2007, 19h28
  4. Insertion d'une mise à jour dans une création de vue
    Par Ptite_Tigresse dans le forum Langage SQL
    Réponses: 0
    Dernier message: 30/08/2007, 12h34
  5. Réponses: 2
    Dernier message: 24/11/2006, 13h20

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