[RESOLU] Privilèges utilisateurs

Eléphant du PHP | 60 Messages

28 sept. 2013, 10:40

Bonjour.

Je cherche à sécuriser une base de données MySQL qui alimentera un site à mettre bientôt en ligne. Pour cela, j'essaie de mettre en place un système basé sur plusieurs utilisateurs ayant chacun un seul privilège de manière à les séparer et, ainsi, à empêcher le détournement de mes requêtes.
Je me fais donc 4 utilisateurs :
- 1 pour les SELECT
- 1 pour les INSERT
- 1 pour les UPDATE
- 1 pour les DELETE

Pour tester ça, j'ouvre une connexion à ma bdd avec l'utilisateur "spécialisé INSERT" dans une page qui fait principalement des SELECT. Et là, surprise, la page s'ouvre normalement et les requêtes s'exécutent parfaitement.
J'ai pourtant bien supprimer tous les privilèges sauf INSERT pour cet utilisateur, alors comment se fait-il qu'il parvienne à exécuter des SELECT ?

Merci d'avance
Cordialement
Ils ne savaient pas que c'était impossible, alors ils l'ont fait...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 sept. 2013, 11:05

Salut,


Je ne vois pas l'intérêt d'avoir autant d'utilisateur.
Si tu protège correctement tes données il n'y a pas aucun risque.
Au pire deux un pour le select et un pour le crud.

Sinon sans le code on ne peu que supposer que :
- tu n'utilise pas le bon utilisateur
- l'utilisateur est la, configuré
- il y a un mélange dans le code qui fait que tu n'utilise pas le mon utilisateur.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 60 Messages

28 sept. 2013, 12:46

Bonjour Moogli.

Mes données, je pense les protéger assez bien mais comme il est difficile d'en être sûr à 100%, je préfère ajouter cette protection là. Bon effectivement,il est peut-être excessif d'avoir 3 utilisateurs différents pour les requêtes d'action, mais si je résous mon problème, je pourrai reconsidérer ça.
Par contre, en ce qui concerne cet utilisateur "réservé insert" qui parvient à faire des select, je ne pense pas me tromper car l'ouverture de la connexion se fait une fois pour toute au début du fichier php, donc facile à vérifier et non, je ne me suis pas trompé d'utilisateur.

Du coup, je penche pour une erreur de configuration ou une incompréhension des privilèges : est-ce que le privilège "insert_priv" inclut le "select" ?
Est-ce correct de n'attribuer que le privilège "insert_priv" à un utilisateur ?

Cordialement
Ils ne savaient pas que c'était impossible, alors ils l'ont fait...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 sept. 2013, 15:42

"insert_priv" je ne vois.
comment as tu paramétré ton utilisateur ?

je te conseil la méthode suivantes :
-- supprimer tous les droits 
REVOKE all on `dummy`.* FROM 'dummy'@'localhost';

-- ajouter l'insert
GRANT insert ON `dummy`.* TO 'dummy'@'localhost';
FLUSH PRIVILEGES;
l'utilisateur et la base s'appel dummy ;)

tu peux le faire pour chaque droit.

pour finir un peu de doc http://dev.mysql.com/doc/refman/5.0/fr/grant.html

Le revoke est a faire avant pour être certain qu'il n'y ai pas de droit traine.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 60 Messages

28 sept. 2013, 16:40

J'ai paramétré mon utilisateur via l'interface de phpMyAdmin.
insert_priv, c'est el champ de la table MySQL db qui correspond au privilège "insert".

Je vais essayer ta méthode
Ils ne savaient pas que c'était impossible, alors ils l'ont fait...

Eléphant du PHP | 60 Messages

28 sept. 2013, 16:46

Ok, j'ai utilisé tes 2 requêtes : même résultat.
J'ai réutilisé uniquement la première pour lui virer tous ses privilèges : cette fois-ci, les requêtes ne sont plus exécutées, ça redevient logique. Mais dès que je lui redonne le privilège 'insert', tous les select fonctionnent à nouveau.
Qu'est-ce qui m'échappe ???
Ils ne savaient pas que c'était impossible, alors ils l'ont fait...

Eléphant du PHP | 60 Messages

28 sept. 2013, 17:01

Ok, j'ai trouvé mon erreur : une instruction d'ouverture d'une connexion avec l'utilisateur "select" était toujours présente, dans un fichier inséré par un include.
Maintenant que je l'ai viré, ça fonctionne bien mieux...
Ils ne savaient pas que c'était impossible, alors ils l'ont fait...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 sept. 2013, 13:09

Tu m'étonne :mrgreen:
J'adore avoir raison :twisted:

Pour info utiliser Grant revoke c'est quand même plus simple ;)

@+
Il en faut peu pour être heureux ......