Passer au nouveau format de mot de passe sous MySQL

 

Il y a quelques temps, je me suis enfin dĂ©cidĂ©e Ă  passer sous WAMP, aprĂšs plus de 10 ans sous EasyPHP 1.8. OK, j'ai un peu traĂźnĂ©. Il faut dire que je m'y Ă©tais attachĂ©e, Ă  mon EasyPHP… Il fonctionnait trĂšs bien (ou je m'Ă©tais habituĂ©e Ă  ses bugs, au choix). L'ennui, c'est qu'avec EasyPHP 1.8, je trouvais limitĂ©e Ă  php 4. Or dĂ©jĂ  php 5.3 n'est plus maintenue depuis le 14 aoĂ»t 2014, alors php 4, vous imaginez… (d'ailleurs si vous ĂȘtes chez OVH, vous avez sans doute reçu un mail dĂ©but mars 2015 vous invitant Ă  migrer votre site en php vers des versions plus rĂ©centes).

 

J'ai donc dĂ©placĂ© les rĂ©pertoires de mes sites et applications php (enfin, la quinzaine dont j'assure encore la maintenance active. Les projets bouclĂ©s, bon, hein…) vers le www/ de Wamp. J'ai crĂ©Ă© les bases correspondantes sous phpMyAdmin. Pour migrer les tables, j'ai simplement dĂ©placĂ© les fichiers correspondant (les .myd .myi et .frm, qu'est ce que c'est pratique, ça) du rĂ©pertoire \EasyPHP1-8\mysql\data\<nom_table> vers \wamp\bin\mysql\mysql5.6.12\data\<nom_table>.

Ensuite, il a fallu activer les short_tags (parce qu'il me reste encore des vieux scripts contenant des balises <? ?>), et nettoyer quelques vieilles fonctions qui n'existent plus (telles session_is_registered, eregi, split).

 

Tout se passait (plutĂŽt) bien, jusqu'Ă  ce que j'essaie de me connecter Ă  une base de donnĂ©es hĂ©bergĂ©e sur un serveur distant (un serveur dĂ©diĂ©)…

mysqlnd cannot connect to MySQL 4.1+ using old authentication

Qu'est ce que c'est encore que cette histoire ?

Les mots de passe permettant d'accéder aux bases MySQL sont stockées dans la base mysql, table user. Du temps de MySQL 4, ces mots de passe étaient encodés sur 16 caractÚres. La nouvelle norme voudraient qu'ils le soient sur 41.

Mon serveur distant dĂ©diĂ© est pourtant en MySQL  5.0.45… Mais visiblement ce n'est pas suffisant (il a Ă©tĂ© mis en service en 2009).

Sur le serveur distant, je me connecte Ă  phpMyAdmin.

La requĂȘte « show variables » me renvoie tous les paramĂštres de mon MySQL. Et notamment old_passwords ON

Dans la base mysql, si j'exĂ©cute cette requĂȘte pour connaitre la longueur des mots de passe

SELECT User, Host, LENGTH(Password) FROM mysql.user

J'ai la valeur 16 pour tous les mots de passe stockés.

 

Je me mets à la recherche de mon fichier my.cnf afin de modifier ça. Je le trouve dans le répertoire /etc

Il ressemble à ça

[mysqld]
set-variable=local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Je commente la ligne old_passwords=1 en la faisant précéder d'un diÚse, je sauvegarde.

Aucun effet. Dans une fenĂȘtre de ligne de commande (Putty), je redĂ©marre le service mysql avec :

service mysqld restart

(mysqld restart tout court me renvoie une erreur)

 

Le redĂ©marrage est trĂšs rapide. MĂȘme pas besoin de me rĂ©-authentifier auprĂšs de phpMyAdmin.

Dans phpMyAdmin, un nouveau « show variables » me renvoie old_passwords OFF

Reste dĂ©sormais Ă  mettre Ă  jour ce fameux mot de passe. Disons que l'utilisateur soit ‘monutilisateur' et que ce mot de passe soit ‘monmotdepasse'

Sous phpMyAdmin, je saisis cette commande dans le champ requĂȘte SQL

UPDATE mysql.user SET Password = PASSWORD('monmotdepasse') WHERE User = 'monutilisateur' limit 1;

 

Et je conclus par un triomphal

FLUSH PRIVILEGES;

Pour vérifier que cela a fonctionné, je refais

SELECT User, Host, LENGTH(Password) FROM mysql.user

Et là je peux lire 41 au niveau de la ligne qui m'intéressait

Et mon systĂšme de connexion Ă  distance refonctionne !

 

Karine SANCHE

Partager cet article