Gérer le forum:  Aide  •  Rechercher  •  Liste des Membres  •  Groupes d'utilisateurs   •  S'enregistrer  •  Profil  •  Se connecter pour vérifier ses messages privés  •  Connexion 
 Tester le droit INSERT MySQL en PHP Voir le sujet suivant
Voir le sujet précédent
Poster un nouveau sujetRépondre au sujet
Auteur Message
Jumbot
Forumeur occasionnel
Forumeur occasionnel


BTS IG - Option réseau 2ème année
Sexe: Sexe:Masculin
Messages: 15
Localisation: Le Mans

MessagePosté le: Mer 21 Fév 2007 - 12:32 Répondre en citantRevenir en haut

Bonjour à tous(tes),

Je m'adresse aux développeurs(ses) les plus assidus(es) présents(es) sur le site ^^.

Voila, ma question est très simple (mais impossible de trouver la réponse sur le net):

"Comment faire, en php, pour tester le droit INSERT d'une base de donnée MySQL" ??"

Je précise, que je veux uniquement TESTER !! Il ne s'agit donc pas, d'insérer une valeure, mais uniquement de savoir si j'ai le DROIT de le faire !!

Merci de vos futures réponses

Jumbot

_________________
Il ne faut pas prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont !
Voir le profil de l'utilisateurEnvoyer un message privéMSN Messenger

N'oubliez pas de vous inscrire à la communauté pour participer. Si vous êtes déjà membre, connectez-vous pour faire disparaître ce bandeau publicitaire.
al3x
Forumeur fréquent
Forumeur fréquent


Futur étudiant
Sexe: Sexe:Masculin
Messages: 74

MessagePosté le: Mer 21 Fév 2007 - 14:04 Répondre en citantRevenir en haut

Hum as tu le droit de faire un INSERT dans une table et ensuite de vérifier si dans la table concernée il y a la valeur que tu ajoutée ?

Tu pourrais expliquer pourquoi, çà aiderait je pense Smile
Voir le profil de l'utilisateurEnvoyer un message privé
Jumbot
Forumeur occasionnel
Forumeur occasionnel


BTS IG - Option réseau 2ème année
Sexe: Sexe:Masculin
Messages: 15
Localisation: Le Mans

MessagePosté le: Mer 21 Fév 2007 - 14:24 Répondre en citantRevenir en haut

Bonjour,

Merci de ta réponse rapide mais ça n'est pas ça mon problème.
Je vais expliquer un peu plus l'objectif de ma question.

Tout le monde ici sait qu'il y a une compétence a couvrir qui est la C37 : Administrer une base de donnée.

Pour couvrir cette compétence, je suis en train de développer (mais je ne suis pas développeur ^^) un portail de gestion (intranet) pour une association.

Dans cette association il y a plusieurs membres actifs (président, secrétaire etc....) et tous n'auront pas les mêmes droits. Certains pourront "SELECT" telles ou telles tables et d'autre pourront "INSERT" ou "UPDATE".

J'ai donc commencé à développer mon portail. Il se présente comme suit :
On se connecte (avec un nom d'utilisateur validée par la BDD) puis, si la connection est acceptée, on arrive à une page avec un panel d'icone servant à administrer les différents modules.
J'ai déjà réussi à afficher/cacher (selon les droits de SELECT) les différentes icones en fonction des droits d'utilisateur.

Lorsque l'utilisateur clique sur l'un des icones, il a ensuite trois choix:
- Consulter
- Ajouter
- Modifier

Pour la consultation c'est facile, si la fonction mysql_query retourne FALSE, c'est que l'utilisateur n'a pas le droit de consultation, donc on affiche pas le lien "Consultation". En revanche, pour l'ajout ou la modification, c'est bien plus compliqué !!

En effet, avec la fonction mysql_query(INSERT INTO 'table' values (...) ), si la fonction retourne TRUE, alors l'insertion est effectué !!!!! MAIS JE NE LE VEUX PAS DANS UN PREMIER TEMPS, puisque je cherche juste a savoir si l'utilisateur aura le droit d'écriture ou non pour afficher/cacher les rubriques "Ajouter" ou "Modifier".

Donc, voila mon problème, il faut que je trouve une autre fonction que mysql_query qui me permettrait uniquement de tester le INSERT ou le UPDATE !!!!

J'ai vraiment besoin de ça, car sinon je ne vois absolument pas comment couvrir la compétence C37 par rapport aux droits d'utilisateurs !

Merci de vos futures réponses

Jumbot

_________________
Il ne faut pas prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont !
Voir le profil de l'utilisateurEnvoyer un message privéMSN Messenger
Vincent
Webmaster
Webmaster


Post-BTS
Sexe: Sexe:Masculin
Messages: 5584
Localisation: Montpellier

MessagePosté le: Mer 21 Fév 2007 - 14:24 Répondre en citantRevenir en haut

Non en fait il veut juste vérifier qu'il a les droits pour faire l'INSERT, mais sans effectuer celui-ci.

Pour vérifier ca, il faut vérifier les droits de l'utilisateur dans la base MYSQL (la base de données qui gère les autres bases et notamment les droits).
Regardes ici :
http://dev.mysql.com/doc/refman/5.0/fr/privileges-provided.html

En gros faut vérifie que ton utilisateur dispose bien des droits INSERT sur la base souhaitée.

_________________
Hey les amis, pensez à suivre @webig sur Twitter, et pourquoi pas me suivre moi @cybervince Wink
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteurMSN MessengerNuméro ICQ
Jumbot
Forumeur occasionnel
Forumeur occasionnel


BTS IG - Option réseau 2ème année
Sexe: Sexe:Masculin
Messages: 15
Localisation: Le Mans

MessagePosté le: Mer 21 Fév 2007 - 14:27 Répondre en citantRevenir en haut

Bonjour,

Merci Vincent, tu as tout à fait compris ce que je voulais faire !!!!!

Je regarde le lien, et je vous tiens au courant de mes tests !!!

Encore merci

Jumbot.

_________________
Il ne faut pas prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont !
Voir le profil de l'utilisateurEnvoyer un message privéMSN Messenger
Jumbot
Forumeur occasionnel
Forumeur occasionnel


BTS IG - Option réseau 2ème année
Sexe: Sexe:Masculin
Messages: 15
Localisation: Le Mans

MessagePosté le: Mer 21 Fév 2007 - 17:51 Répondre en citantRevenir en haut

Bonjour,

Et bien merci à Vincent, qui m'a bien aidé sur ce coup là Wink
Ce que je voulais faire commence à avoir de l'allure, je pense qu'à ce rythme la j'aurais fini mon portail dans 2 à 3 semaines Wink

Mon problème est donc résolu, encore merci et @ bientôt !

Jumbot

_________________
Il ne faut pas prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont !
Voir le profil de l'utilisateurEnvoyer un message privéMSN Messenger
al3x
Forumeur fréquent
Forumeur fréquent


Futur étudiant
Sexe: Sexe:Masculin
Messages: 74

MessagePosté le: Mer 21 Fév 2007 - 19:06 Répondre en citantRevenir en haut

Si j'ai bien compris (je viens de me réveiller d'une sieste de 3heures alors dsl mdr), tu veux savoir :

user : Admin => Ecrire / Lecture
user : Secrétaire => Lecture
user : ?? => ?? / ??

C'est bien çà ?

Alors pourquoi ne pas les identifier par un id tout simplement. Sur ton panneau de configuration, tu met un switch ou une condition toute bete qui balance selon les droits vers une page ou une autre. Pour que ce soit plus secure, tu peux utiliser les sessions, ou les cookie.

Comme çà, pas besoin de requete SQL.

Bien sur, ma solution n'est efficasse que SI tu as le choix, car apparament, le C37 est une forme de certification (ouais dsl je ne suis encore qu'au lycée Embarassed ) et donc tu n'auras peut etre pas le choix, quel bande de tiran les profs Twisted Evil
Voir le profil de l'utilisateurEnvoyer un message privé
Mingain
Accro à Web-IG
Accro à Web-IG



Sexe: Sexe:Masculin
Messages: 185
Localisation: Nîmes

MessagePosté le: Lun 05 Mar 2007 - 12:33 Répondre en citantRevenir en haut

Code:

$requete = "INSERT ... nanani nanana";
$query = mysql_query($requete);

if($query) echo"Tu as les droits - la requete fonctionne";
else echo"Tu n'as pas les droits - la requete ne fonctionne pas";





Si tu pouvais plus éclairer sur ce problème de "droit". J'ai du mal à saisir !

_________________
www.en-camargue.fr : Tourisme et photos en camargue
www.vauclare.fr : Creation de site Web sur mesure dans le gard
Voir le profil de l'utilisateurEnvoyer un message privéEnvoyer l'e-mailAdresse AIMMSN Messenger
Vincent
Webmaster
Webmaster


Post-BTS
Sexe: Sexe:Masculin
Messages: 5584
Localisation: Montpellier

MessagePosté le: Lun 05 Mar 2007 - 14:46 Répondre en citantRevenir en haut

Mingain a écrit:
Code:

$requete = "INSERT ... nanani nanana";
$query = mysql_query($requete);

if($query) echo"Tu as les droits - la requete fonctionne";
else echo"Tu n'as pas les droits - la requete ne fonctionne pas";



La c'est pas un problème de droits. Tu exécutes carrément la requête pour savoir si elle ne renvoie pas d'erreur.

_________________
Hey les amis, pensez à suivre @webig sur Twitter, et pourquoi pas me suivre moi @cybervince Wink
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteurMSN MessengerNuméro ICQ
Jumbot
Forumeur occasionnel
Forumeur occasionnel


BTS IG - Option réseau 2ème année
Sexe: Sexe:Masculin
Messages: 15
Localisation: Le Mans

MessagePosté le: Lun 05 Mar 2007 - 22:53 Répondre en citantRevenir en haut

Bonjour à tous,

Je vois que ce "problème de droit SQL" en intrigue quelques uns ^^.
Ce que dis vincent dans son dernier post est tout à fait juste.
En faisant un "INSERT" et en le testant après, c'est trop tard, puisque si la requete abouti, l'insertion est effectuée.

Hors moi ce que je voulais faire, ou plutot, ce que je suis actuellement en train de développer, c'est la possibilité (en fonction des droits SQL) d'avoir accès ou non à certaines catégories sur un portail.

Je vais expliquer clairement comment je procède.
Les connaisseurs des bases de données savent (et justement moi je l'avais remarqué mais je ne voyais pas son utilité) qu'il y a une base de donnée nommée "mysql" qu'il ne faut ABSOLUMENT PAS SUPPRIMER. Evidemment, puisque c'est elle qui gère les privilèges (SELECT, UPDATE, INSERT ......).

Cette bdd est composé de 6 tables nommées ainsi :


- columns_priv : Alors celle là j'ai pas encore bien compris a quoi elle servait ^^
- func : Celle là non plus je ne sais pas encore à quoi elle sert
- host : Contient les droits que les machines qui se connectent a distance ont sur les bdd
- user : Contient les user / mdp associé et les droits "globaux".
- db : Contient les droits que les utilisateurs ont sur les bdd.
- tables_priv : Contient les droits en fonction de l'utilisateur, de la machine de connection, de la bdd et des tables.

Dans l'ordre dans lesquelles je les ai écrites, vous remarquez tout de suite, que plus on "descends" et plus les droits sont "affinés".

P.S : Si tout celà ne vous semble pas clair, sachez qu'il y a bon nombre d'info de disponible sur le net Laughing

Donc, dans mon cas, j'utilise une seule tables : tables_priv (c'est la plus "fine" au niveau des droits).

Dans cette table, il y a un champ appelé (aussi) tables_priv, dans lequel sont stockés les droits que l'utilisateur a, en fonction de la table et de la machine avec laquelle il se connecte. Ce champ peut contenir absolument toutes les fonctions qui sont utilisables sur une base de donnée a savoir SELECT, INSERT, UPDATE, DELETE, GRANT etc......

Chacune d'entres elles n'apparaissent que si l'utilisateur disposent du droit en question. Elles sont séparés par des virgules (lorsque l'user a plusieurs droits) comme je l'ai indiqué plus haut.

Voici un exemple d'une fonction que j'utilise pour savoir si mon user a le droit ou non de faire tel ou tel chose:

Citation:

$select_calend = mysql_query ("SELECT * FROM tables_priv WHERE user='president' AND table_name='calendrier' AND table_priv LIKE '%insert%'");


Expliquons un peu cette requete qui permet de savoir si l'utilisateur "president" à droit a "l'insertion" sur la table "calendrier":

Ce qu'il faut savoir, c'est que la function "mysql_query" dans le cas d'un SELECT peut renvoyer en tout est pour tout 3 valeures :
- FALSE : La requete n'a pas abouti (pas les droits / erreur de lecture de la base.....)
- Vide : La requete a abouti, mais la sélection demandée n'a rien renvoyé
- données[i] : Un tableau chargé en mémoire dans lequel il y a les données trouvées dans la bdd.

Dans mon cas, c'est assez suptile. Je sais que si la requete renvoie FALSE (ormis les erreurs de connection à la bdd ....) c'est que l'utilisateur n'a pas accès a la table en question.
En revanche, si la requete ne renvoie rien, c'est que l'utilisateur à bel et bien des droits sur la table en question, mais pas à l'INSERT
Enfin, si la requete renvoie des données, c'est que le user a droit a l'INSERT.

Voici donc pour finir un exemple qui parle de lui même pour savoir si oui ou non, mon user president a droit à l'insertion dans le calendrier (c'est en fait un lien qui s'affiche ou non sur la page et qui donne accès lorsque l'on clic dessus à la page calendrier):

Citation:


$select_calend = mysql_query ("SELECT * FROM tables_priv WHERE user='president' AND table_name='calendrier' AND table_priv LIKE '%insert%'");

if (mysql_fetch_object($select_calend) != '' && $select_calend != FALSE)
{
echo ("Calendrier");
}


Voila, bon, c'est surement très "basique" comme raisonnement, mais je rappel que je ne suis pas développeur, et que ca marche !!!
Je n'hésiterai pas a ajouter que la partie que je vous montre ne contient quasiment aucune sécurité, mais que de mon coté mes pages sont très sécurisés (je pense déjà au petit malin qui irait taper directement l'adresse de la page dans la barre d'adresse ^^).

Je rajouterai un grand MERCI à celui qui m'a permis de réaliser (le premier ??) portail qui réagit VRAIMENT en fonction des utilisateurs CONNUS par la base de donnée, ainsi que des VRAIS DROITS SQL a savoir : Vincent

Merci à lui et à vous tous Very Happy

Jumbot.

_________________
Il ne faut pas prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont !
Voir le profil de l'utilisateurEnvoyer un message privéMSN Messenger
Montrer les messages depuis:      
Poster un nouveau sujetRépondre au sujet
 Sauter vers:   



Voir le sujet suivant
Voir le sujet précédent
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum