plusieurs utilisateurs et plusieurs bases

Petit nouveau ! | 2 Messages

01 oct. 2010, 19:06

bonjour,
Étant donné que j'ai plusieurs utilisateurs qui viennent sur mon site et que chacun d'entre eux a une base de donnée qui lui est propre. La gestion de chaque utilisateur est faite avec GRANT pour qu'ils n'aient accès en écriture qu'à leur base et qu'en lecture à la base commune.
Je me suis dit que je pouvais les connecter comme ca :
$pass=$_POST['pass'];
$user=$_POST['user'];
if((empty($user))||(empty($pass))||(preg_match('/\W/',$pass))||($user=='root'))
return null;
else
return new PDO('mysql:host=127.0.0.1;dbname='.$user,$user,$pass);
C'est peut être une question bête, mais ce genre de connexion est introuvable, personne ne le fait (à par phpmyadmin).
Tous le monde fait comme ca :
1 création d'une seconde table user avec champs login, et pass en sha1
2 à la connexion, vérification du pass posté et connexion avec root.

La question qui me trotte :
Est-ce que "ma" manière de faire est aussi (plus-moins ?) sécurisée que la manière commune ?

Merci.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

02 oct. 2010, 10:05

Bonjour,

Ce n'est à priori pas moins sécurisé (même si je pense qu'il faudrait que tu effectues ton filtrage via preg_match aussi sur $user).
Toutefois, en terme d'évolutivité c'est pas forcément le plus efficace. Si tu commences à avoir beaucoup d'utilisateurs, ça t'oblige à créer autant d'utilisateurs MySQL et de bases associées, si un membre change de mot de passe il faut changer le mot de passe de l'user MySQL, si il supprime son compte, il faut supprimer l'utilisateur et la bdd associé, etc...
Par ailleurs, si dans chaque BDD tu as la même structure, ça fait beaucoup de redondance.

C'est peut être approprié pour ton cas d'utilisation mais généralement ce n'est pas le cas et c'est pour cela qu'on utilise juste une table avec les utilisateurs et l'empreinte de leur mdp. En revanche on ne s'y connecte pas en root mais avec un utilisateur MySQL qui ne doit avoir que les droits dont il a besoin. :)
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 2 Messages

04 oct. 2010, 18:54

En effet, certaines tables ne sont pas partagées entre les utilisateurs, et pour les autres, j'ai utilisé un utilisateur adapté.
Merci pour ces éclaircissements.