Bonjour bonjour
J'ai une problématique d'ordre conceptuelle pour vous.
Je m'intéresse depuis peu à la gestion des utilisateurs dans une base de donnée. Jusqu'à maintenant, je gérais ça "à la main" on va dire, via une table que j'ai crée moi même.
Mais ce que je souhaite faire maintenant c'est limiter l'accès aux utilisateurs à certaines parties de la BDD, en particulier certains champs d'une table.
Rien de plus simple me direz-vous, il suffit de donner des privilèges limités à cet utilisateur :
Seulement voila, j'ai aussi besoin d'effectuer une selection sur cette table. Comme il est impossible d'allier l'instruction WHERE avec GRANT, la solution parfaite est de faire une vue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE table1 ( key INT NOT NULL, champ1 VARCHAR(30), champ2 VARCHAR(30), PRIMARY KEY (key) ); CREATE USER toto@localhost IDENTIFIED BY 'averystrongpassword'; GRANT SELECT(key, champ1) ON table1 TO toto@localhost;
On change donc de méthode et on adopte :
Maintenant tout à l'air parfait, mon utilisateur ne peux sélectionner que certaines données. Plus besoin donc de se poser des questions de sécurité à ce niveau la (car oui c'est le but de la manoeuvre en fin de compte).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 CREATE VIEW view1 AS SELECT key, champ1 FROM table1 WHERE champ2 = "value"; GRANT SELECT ON view1 TO toto@localhost;
Moi, en tant que dév Web, j'ai besoin de développer une magnifique appli web sur laquelle mon utilisateur 'toto' va se connecter.
Cette vue représentant des données qui seront chargées dans une variable de session, je vais donc écrire mon petit algo :
Tout marche bien, tout est beau dans le meilleur des mondes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 $query = $bdd->prepare( "SELECT * FROM view1" ); $query->execute(); $data = $query->fetchAll(PDO::FETCH_ASSOC); $query->closeCursor(); session_name($cookie); session_start();// Démarre la session foreach ($data as $key => $value) $_SESSION[$key] = $data[$key];
Sauf que moi, j'ai quand même envie que plusieurs utilisateurs différents se connectent à mon site ^^
Alors créer des vues de manière dynamique à la création d'un compte, pourquoi pas. Mais comment diable est-ce que je vais faire pour que dans ma page PHP, ma requête pointe sur la bonne vue associée à l'utilisateur qui se connecte ?
On pourrait se dire, tu sélectionnes toute les vues de ta base sur lesquelles t'a des droits et tu prends que celle qui t'intéresse, en la choisissant par exemple en fonction d'un pattern dans son nom.
Ou encore, tu fais une magnifique table associative de tes users et de leurs vues respectives.
Mais bon ça me parait très "bricolo" tout ça xD Par pitié dites moi que c'est pas mes seules options
Je débute sur ce genre de problématique, mais je suis persuadé que c'est quelque chose qui a déjà été pensé, c'est juste que j'en connait pas la réponse
Quel est le consensus général dans ce genre de cas ? Qu'elle méthode adoptent les architectes Web ?
Merci à tout ceux qui prendrons le temps de me lire
PS : d'ailleurs si quelqu'un saurait aussi comment faire récupérer quelque chose comme un identifiant utilisateur ? les utilisateurs mysql sont enregistrés dans une autre base, "mysql". Pour l'instant j'ai juste rajouté une colonne dans ma table avec le nom de l'utilisateur pour faire ma jointure, mais j'aimerai quelque chose de plus solide qu'un simple nom ^^
Partager