Après lecture de différents Posts et une analyse minutieuse à l'aide de mon Super-Cerveau digne d'un Bulôt cuit, je reste incapable de faire la manip suivante...
Je souhaite modifier l'utilisateur par défaut utilisé par PHP pour accéder à la base MySQL de mon site.
Je l'ai modifier et, dès que je tente de m'authentifier sur les pages admin de mon site, j'obtient ça :
Warning: mysql_connect() [function.mysql-connect]: Client does not support authentication protocol requested by server; consider upgrading MySQL client in C:\wamp\www\...\functions.php on line 11
Je souhaite garder l'utilisateur root@localhost. Ce que je veux c'est que mon site PHP puisse se connecter à la base MySQL le concernant en tant qu'utilisateur toto que j'ai déjà créé :
host : localhost BDD : les_blagues_a_toto user : toto password : pipicaca
Qui n'aura qu'un accès limité sur MySQL : SELECT UPDATE DELETE INSERT
Comment puis je procéder ? Quels fichiers ini dois je changer et quel paramètre? Et PhpMyAdmin pourra t'il continuer à utiliser l'utilisateur root@localhost, ou sera t'il lui aussi affecté ?
Déjà, avant de vous répondre plus avant, j'ai besoin de savoir plusieurs choses :
> Je souhaite modifier l'utilisateur par défaut utilisé par PHP pour accéder à la base MySQL de mon site. Ne serait-ce pas, plutôt, que vous voulez changer le nom utilisateur et le mot de passe utilisés par un fichier de configuration d'une application PHP qui se connecte à une base de données en utilisant MySQL ?
> Ce que je veux c'est que mon site PHP puisse se connecter à la base MySQL le concernant en tant qu'utilisateur toto que j'ai déjà créé.
Cet utilisateur toto, vous l'avez créé où et comment ?
> Et PhpMyAdmin pourra t'il continuer à utiliser l'utilisateur root@localhost, ou sera t'il lui aussi affecté ? Tant que vous ne supprimerez pas l'utilisateur root@localhost de la table user de la base mysql, vous pourrez continuer à l'utiliser pour vous connectez à PhpMyAdmin.
>>> Je souhaite modifier l'utilisateur par défaut utilisé par PHP pour accéder à la base MySQL de mon site.
>Ne serait-ce pas, plutôt, que vous voulez changer le nom utilisateur et le mot de passe utilisés par un >fichier de configuration d'une application PHP qui se connecte à une base de données en utilisant MySQL ?
Euh... En fait J'ai un site dans le répertoire www de Wamp, il utilise un fichier de config avec les infos suivantes concernant la connexion a MySQL :
function connexion_DB() { // Déclaration des paramètres de connexion $host = "localhost"; $user = "root"; $bdd = "Les_blagues_a_toto"; $passwd = ""; }
Aucun problème de connexion en utilisant root l'authentification sur le site se fait sans problème. Le problème c'est que mon site se connecte à MySQL avec des privilèges dignes de Dieu le père, donc en cas de failles de sécurité dans mon code les gentils forbans vont s'en donner à cœur joie en massacrant mes pauvres petites bases, pilonant les tables au canon et violant les mots de passe.
Ce que je veux c'est qu'il puisse accéder à MySQL en utilisant le nom d'utilisateur que je lui ai créé (voir question 2):
function connexion_DB() { // Déclaration des paramètres de connexion $host = "localhost"; $user = "toto"; $bdd = "Les_blagues_a_toto"; $passwd = "pipicaca"; } Mais avec cette configuration le site plante... Pourtant l'utilisateur toto me semble valide, j'ai du oublier un truc quelque part.
>>> Ce que je veux c'est que mon site PHP puisse se connecter à la base MySQL le concernant en tant qu'utilisateur toto que j'ai déjà créé.
>Cet utilisateur toto, vous l'avez créé où et comment ?
Je l'ai créé par PhpMyAdmin, il a des privilèges SELECT INSERT UPDATE DELETE uniquement sur la base "Blagues_a_toto" il ne peut ni accéder et encore moins modifier les autres bases. Procédure : PhpMyAdmin > Localhost >Privilèges > Ajouter un utilisateur Privilèges globaux : tout décocher Privilèges spécifique à "Les_Blagues_a_toto" : SELECT INSERT UPDATE DELETE Informations de connexion : celles de la config ci-dessus
Access denied for user 'toto'@'localhost' (using password : YES)
Si oui, c'est qu'il doit exister d'autres utilisateurs que toto et root sur localhost, par exemple un utilisateur anonyme ''@localhost sans mot de passe.
Via PhpMyAdmin, Privilèges, supprimer tous les utilisateurs sauf root@localhost et toto@localhost.
Warning: mysql_connect() [function.mysql-connect]: Client does not support authentication protocol requested by server; consider upgrading MySQL client in C:\wamp\www\...\...\...\functions.php on line 11
Les \...\ sont des noms de dossier que j'ai masqués, tout comme toto qui n'est pas le vrai nom...
le fichier fonctions.php :
1: <?php 2: // Se connecte à la DB 3: // Paramètres : nom de la base -> $name_DB 4: function connexion_DB() { 5: // Déclaration des paramètres de connexion 6: $host = "localhost"; 7: $user = "toto"; 8: $bdd = "Les_blagues_a_toto"; 9: $passwd = "pipicaca"; 10: // Connexion au serveur 11: mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur" ... ?>
Sauver le fichier modifié. Lancer Wampserver Lancer PhpMyAdmin et mettre User = root et le mot de passe (si défini) pour vérifier connexion avec root@localhost Quitter PhpMyAdmin et Wampserver et fermer le navigateur (Pour détruire la session) Relancer Wampserver Lancer PhpMyadmin et mettre User = toto et le mot de passe pipicaca pour vérifier connexion avec toto@localhost
Bonjour, c'est pas pour gêner mais , moi quand je lance PHPmyAdmin , il me demande le user : je met root , et le mot de passe je met monmotdepasse ( oui c'est celui la ^^ ) et là il remet la page à zàro et je dois remettre le user et mot de passe , que dois-je faire ( aussi quand j'ai fais la commande pour changer le mot de passe cela ne change rien )
Jonahboss a écrit: ------------------------------------------------------- > Avec root No problem. > > Avec toto : > > #1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client
Quelles sont vos versions Apache, PHP, MySql et PhpMyAdmin ?
Je crains fort, vu les versions utilisées, de ne pouvoir vous venir plus en aide.
En vous connectant sur PhpMyAdmin en tant que root@localhost, supprimez l'utilisateur toto@localhost puis quittez PhpMyAdmin, le navigateur et Wampserver.
Relancer Wampserver puis PhpMyAdmin, bien sûr en tant que root@localhost et ajoutez l'utilisateur toto@localhost, dans un premier temps sans mot de passe et avec tous les privilèges. Quittez PhpMyAdmin, le navigateur et Wampserver.
Relancer Wampserver puis PhpMyAdmin en tant que toto@localhost pour vérifier la connexion.
Recommencer, pas à pas, les manipulations, en tant que root@localhost pour d'abord mettre un mot de passe à toto@localhost, puis, si ça fonctionne, limiter les privilèges de toto.
Le problème vient du fait qu'à partir de MySQL 4.1 la fonction password de Mysql qui hash les mots de passe est passée d'un hash de 16 caractère à 41 caractères...
Donc à problème de Barbare solution de Barbare !
1) Dans PhpMyAdmin connection sous root sans mot de passe. 2) Ouverture de la base nommée mysql. 3) dans la table user on modifie le champ password de 41 on passe la longueur du champ à 16 caractères.
Le champ étant limité à 16 caractère le serveur MySQL n'a pas le choix il hash le password sur 16 au lieu de 41.
On doit donc recréer l'utilisateur toto avec les privilèges voulus et, AU MIRACLE ! Tout fonctionne sans problème.
Inconvénient : un hash de 16 caractère est plus facile à cracker qu'un hash de 41 caractères.
Merci Otomatic pour son aide (même si sur ce coup il est resté en manuel ;-) ) j'ai un peu mieux compris comment marchait MySQL ça devrait m'aider dans le futur.
[EDIT] A Otomatic : La dernière solution vous proposez n'a malheureusement pas marcher. Quand ça veut pas, ça veut pas ! Merci quand même
Modifie 1 fois. Derniere modification le 15/01/2009 à 12:43 par Jonahboss.