6.12 Comment affecter les mots de passe

Les exemples des sections précédentes illustre un principe important : lorsque vous enregistrez des mots de passe non vide avec les commandes INSERT ou UPDATE, vous devez utiliser la fonction PASSWORD() pour l'encrypter. En effet, la table user conserve les mots de passe sous forme cryptée, et non pas en clair. Si vous oubliez ceci, vous pouvez vous retrouver avec des mots de passes tels que :

shell> mysql -u root mysql
mysql> INSERT INTO user (Host,User,Password)
       VALUES('%','jeffrey','biscuit');
mysql> FLUSH PRIVILEGES;

Le résultat est que la valeur en clair 'biscuit' est enregistrée dans la table user. Lorsque l'utilisateur jeffrey va tenter de se connecter au serveur, le client mysql va crypter le mot de passe qui lui est fourni avec PASSWORD(), et l'envoyer au serveur. Le serveur compare alors la valeur qui est stockées (qui est en clair 'biscuit') avec la même valeur, mais encryptée (qui ne sera pas 'biscuit'). La comparaison échoue, et le serveur rejette al connexion.

shell> mysql -u jeffrey -pbiscuit test
Access denied

Etant donné que les mots de passe doivent être crypté lorsqu'ils sont inséré dans la table user, la commande INSERT doit être spécifié comme suit :

mysql> INSERT INTO user (Host,User,Password)
       VALUES('%','jeffrey',PASSWORD('biscuit'));

Vous devez utiliser la fonction PASSWORD() lorsque vous utilisez la clause SET PASSWORD:

mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');

Si vous ajoutez un mot de passe avec la commande GRANT ... IDENTIFIED BY ou avec la commande mysqladmin password, la fonction PASSWORD() n'est pas nécessaire. Ces deux méthodes crypte le mot de passe pour vous :

mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';

or

shell> mysqladmin -u jeffrey password biscuit

Note: PASSWORD() dispose d'une encryption qui n'est pas la même que sous Unix. Il ne faut pas supposer que le mot de passe Unix et MySQL sont les mêmes, même si PASSWORD() retourne la même valeur que celle qui est stockée dans le fichier de mot de passe de Unix. 6.2 Noms et mot de passe des d'utilisateurs MySQL.