|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre actif
![]() Emeline DabéeWebmaster Inscription : mars 2010 Messages : 136 ![]() |
Bonjour,
Le titre n'est pas vraiment explicite je sais, je n'ai pas trouvé mieux. Je suis en train de concevoir un site de type "gestion de données commerciale", un front office "catalogue de produit" et un backoffice de gestion du site et des données. J'ai un problème de conception au niveau de la connexion aux bases de données. Mon site s'adresse à des magasins, chaque magasin comprenant un certains nombre d'utilisateur du site. Lorsqu'un de ces utilisateurs veut se connecter, j'aimerai identifier la base de données à laquelle il veut se connecter mais sans lui demander, juste via son identifiant et son mot de passe. C'est là que je bloque. Chaque magasin possédant sa propre base de données, j'avais pensé faire une base spécifique à la détection de l'utilisateur qui me renverrait les informations concernant la base de données du magasin à laquelle mon site doit se connecter pour afficher les informations. Mais je ne vois absolument pas comment conserver mes informations tout en les protégeant, je ne veux pas passer des identifiants de connexion à une BD en POST ou GET ou autre. J'avais pensé à une variable superglobale PHP mais là encore je ne vois pas comment le mettre en place. Mon cerveau surchauffe je me perds dans mes réflexions, si quelqu'un peut m'apporter un peu de liquide de refroidissement il est le bienvenu! |
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Olivier Étudiant Inscription : novembre 2010 Messages : 303 ![]() |
Pourquoi ne pas tenter une solution "à la dure" tu test une base de données et si ça ne marche pas tu enchaîne avec la suivante !
(Je plaisante Tu cherches donc à savoir quel user doit se connecter à quel base de données, lorsqu'un utilisateur souhaite se connecté tu ne récupère que son couple loggin / password ? Tu n'as aucun élément qui pourrait te permettre d'identifier la base de données, comme une url spécifique ? Une autre solution serrait de créer une base de données contenant tous les user avec la base de données à lequel il est rattaché, mais gare au doublon ... Si un même loggin peut être présent dans plusieurs base de données alors tu n'as pas le choix tu vas devoir envoyer une donnée à la connexion te permettant d'identifier la bonne base ... |
|
|
10
|
|
|
#3 |
|
Membre actif
![]() Emeline DabéeWebmaster Inscription : mars 2010 Messages : 136 ![]() |
Merci humitake de ta réponse
Oui c'est ce que je me disais aussi, mais pour parer à ce problème de doublon je me disais que l'idée serait de faire une base dites de "connexion" qui contiendrais tout les utilisateurs de toutes les bases de données magasin (oui c'est...comment dire, imposant non?), ainsi que les identifiants de connexion à ces bases. Du coup comme la vérif se fait sur une seule base, pas de problème de doublon mais on réduit le nombre de login possible. Du coup lors du login, dans mon constructeur d'objet connexion je vais fouiller dans ma base de données pour pouvoir récupérer les identifiants de connexion BD client et effectuer les requêtes SQL. Mais ça reste un peu lourd. Et sinon, autre solution comme tu proposes, mettre une liste déroulante avec tout les magasins (et donc base de données) afin que celui qui veut se connecter sélectionne la BD. Malheureusement cette solution ne m'enchante pas car elle entraine que n'importe quel utilisateur pourrait voir tout les autres magasins qui sont clients de mon site. Alors il reste quoi, une zone de saisie? C'est ce qui me parait le plus simple, même si cela entraine une surcharge de saisie pour l'utilisateur. Qu'en penses-tu? |
|
00
|
|
|
#4 | |
|
Membre éclairé
![]() Olivier Étudiant Inscription : novembre 2010 Messages : 303 ![]() |
Citation:
Car une solution à laquelle j'ai pensé, mais je ne sais pas si elle est envisageable dans ton cas, serait de fournit une url spécifique pour un magasin. Sa fonctionnerais dans le cas ou tu dit par exemple au employé de carrefour de se connecter à l'url carrefour.gestion.com et ceux de auchan à l'url auchan.gestion.com. Mais cela rejoins un peu l'idée de la zone de saisie. Edit : Une petite idée vient de jaillir de mon esprit Sinon pourquoi ne pas ajouter un préfixe au loggin qui te fournirais l'information de la base de donnée ? Par exemple carrefour.loggin, ainsi un explode sur le . te permet d'identifier la base de données et de t'y connecter. |
|
|
|
10
|
|
|
#5 |
|
Membre actif
![]() Emeline DabéeWebmaster Inscription : mars 2010 Messages : 136 ![]() |
Très bonne question! Je n'ai pour l'instant pas envisagé de permettre à un utilisateur de se connecter à plusieurs magasins différents. Mais néanmoins cela reste possible, qu'on utilise une url spécifique ou un champs de saisie de magasin, puisque de toute façon j'irai chercher dans ma BD les identifiants de connexion correspondants.
Un utilisateur pourra donc être relié à autant de Magasins que désiré, puisqu'on spécifie lors du login à quelle base on souhaite se connecter. J'utilise PDO afin de me connecter à ma BD, j'avais pensé insérer la vérification de la base de données demandée lors de la construction de l'appel à ma BD 'connexion', ce qui me permettrait de récupérer (toujours dans mon constructeur) les identifiant de connexion à la BD Magasin, de m'y connecter, d'effectuer la requête, de récupérer le résultat et de le retourner, tout ça encapsulé dans mon constructeur de connexion à ma BD pour éviter les hack. Penses-tu que cette solution soit assez sécurisée? Edit : je viens de voir ton idée, elle n'est pas mauvaise du tout |
|
00
|
|
|
#6 |
|
Membre éclairé
![]() Olivier Étudiant Inscription : novembre 2010 Messages : 303 ![]() |
Niveau sécurité je ne suis pas un expert, mais je dirais que c'est plutôt bien pensé, ainsi tout est effectué par le constructeur et il ne peut pas y avoir d'action dessus.
|
|
|
10
|
|
|
#7 |
|
Membre actif
![]() Emeline DabéeWebmaster Inscription : mars 2010 Messages : 136 ![]() |
Bon je vais essayer ça, je reviendrais pour confirmer si ça répond à mes attentes
Edit : Avant d'oublier de valider on sait jamais avec ma mémoire de poisson rouge, je met le sujet en résolu, je le rouvrirai en cas de cas (même si je penses qu'on est arrivé à la solution la plus pertinente) ^^ |
|
00
|
|
|
#8 |
|
Membre éclairé
![]() Olivier Étudiant Inscription : novembre 2010 Messages : 303 ![]() |
Alors j’attends ton retour
|
|
|
10
|
|
|
#9 | ||
|
Membre actif
![]() Emeline DabéeWebmaster Inscription : mars 2010 Messages : 136 ![]() |
Bonjour,
J'ai essayé de mettre en place notre solution, mais je bloque dans le code. Code php :
Je n'arrives pas à concevoir autre chose que récupérer mes login et mdp en session, ce qui est mauvais niveau sécurité. Mais je ne vois pas d'autre solution que de passer en appel mes identifiants à chaque demande de connexion à la base de données. Peut-être que je m'y prend mal? |
||
|
00
|
|
|
#10 |
|
Membre éclairé
![]() Olivier Étudiant Inscription : novembre 2010 Messages : 303 ![]() |
Pourquoi les stocker en session ? Tu ne peux pas directement les envoyer en paramètre POST sur la page qui appelle cette fonction ?
|
|
|
10
|
|
|
#11 |
|
Membre actif
![]() Emeline DabéeWebmaster Inscription : mars 2010 Messages : 136 ![]() |
Le problème c'est que j'aurai besoin de me connecter à ma base de données spécifique à chaque fois que je veux faire une requête SQL.
Je dois donc toujours garder quelque part mes identifiants afin de les appeler dans ma fonction de connexion. C'est ce quelque part que je ne trouve pas. Les seules informations en dur dans le code php sont les identifiants de connexion à ma BD "routeur". Mais peut être que pour ce genre d'information, un cookie est préférable? En tout cas, cela fonctionne avec passage par session des identifiants Edit: Schéma de mon fonctionnement |
|
00
|
|
|
#12 |
|
Membre éclairé
![]() Olivier Étudiant Inscription : novembre 2010 Messages : 303 ![]() |
Jolie schéma
![]() Alors si j'ai bien compris les identifiants de connexion aux bases "Mag" sont enregistrer dans la base "BD Routeur". Dans ce cas tu n'as besoin que du nom de la bd "Mag" et tu fait une requête pour récupérer les identifiant de connexion à la base au début d'un traitement. A la limite si tu as peur pour la sécurité je te conseil d'assigné un loggin "aléatoire" pour chaque base "Mag" et lors de la connexion de l'utilisateur tu stock uniquement ce loggin (par exemple AF86-c5GT) et lorsqu'il faut réaliser une requête tu récupère les identifiant de connexion pour la base de données alors le loggin (AF86-c5GT). Mais comme je l'ai déjà dit je ne suis pas un pro de la sécurité non plus ... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com