Le processus d'installation de MySQL passe par la création de
la base de données mysql, qui contient les
tables de droits :
La distribution Windows contient des tables de droits pre-initialisées automatiquement.
Sous Unix, les tables de droits sont remplies par le
programme mysql_install_db. Certains
assistants d'installation le font pour vous. Les autres vous
imposent de le faire manuellement. Pour plus de détails,
voyez Section 2.5.2, « Procédures de post-installation sous Unix ».
Le script mysql_install_db démarre le
serveur mysqld et initialise les tables de
droits, avec les paramètres suivants :
Deux comptes MySQL root sont créés en
tant qu'administrateurs ayant tous les droits. Le mot de
passe de l'utilisateur initial root est
vide, ce qui permet à n'importe qui de se connecter en tant
que root sans mot de
passe, pour profiter de tous les droits.
Sous Windows, un compte root permet
de se connecter depuis l'hôte local, et l'autre depuis
n'importe quel hôte.
Sous Unix, les deux comptes root sont
destinés à être utilisés depuis le compte local. Les
connexions doivent être faîtes en spécifiant le nom
d'hôte localhost, ou le véritable
nom d'hôte, ou l'adresse IP.
Deux comptes utilisateur anonyme sont créés, qui peuvent
faire ce qu'ils veulent avec toutes les tables dans la base
de données 'test' ou commen¸ant par
'test_'. Cela signifie qu'un utilisateur
peut se connecter sans mot de passe et être traité comme
un utilisateur anonyme.
Sous Windows, un compte anonyme sert depuis l'hôte
local. Ce compte a tous les droits, comme
root. L'autre sert aux connexions
depuis les hôtes, et a tous les droits pour les bases
test ou commen¸ant par
test.
Sous Unix, les deux comptes anonymes servent depuis
l'hôte local. Les connexions doivent être faîtes en
spécificant le nom d'hôte
localhost, ou le véritable nom
d'hôte, ou l'adresse IP. Ces comptes ont tous les
droits dans les bases test ou dont le
nom commence par test_.
Comme indiqué, aucun des comptes initiaux n'a de mot de passe. Cela signifie que votre installation MySQL n'est pas protégée jusqu'à ce que vous y remédiez :
Si vous voulez éviter que les clients ne se connectent en tant qu'utilisateur anonyme sans mot de passe, vous devez assigner des mots de passe à ces comptes, ou bien les supprimer.
Vous devez assigner des mots de passe aux comptes
root.
Les instructions suivantes décrivent comment configurer les
mots de passe pour les comptes initiaux, en commen¸ant par les
comptes anonymes, puis pour les comptes root.
Remplacez ``nouveau_mot'' dans les exemples
ci-dessous par le nouveau mot de passe que vous voulez utiliser.
Ces instructions montrent aussi comment supprimer les comptes
anonymes.
Vous pouvez différer le changement de mot de passe jusqu'à plus tard, pour pouvoir utiliser cette configuration pour les tests. Cependant, n'oubliez pas de le faire avant de mettre votre serveur en production.
Pour assigner des mots de passe aux comptes anonymes, vous
pouvez utiliser les commandes SET PASSWORD et
UPDATE. Dans les deux cas, assurez-vous de
chiffrer les mots avec la fonction
PASSWORD().
Pour utiliser SET PASSWORD sur Windows,
faîtes :
shell>mysql -u rootmysql>SET PASSWORD FOR ''@'localhost' = PASSWORD('nouveau_mot');mysql>SET PASSWORD FOR ''@'%' = PASSWORD('nouveau_mot');
Pour utiliser SET PASSWORD sur Unix,
faîtes :
shell>mysql -u rootmysql>SET PASSWORD FOR ''@'localhost' = PASSWORD('nouveau_mot');mysql>SET PASSWORD FOR ''@'host_name' = PASSWORD('nouveau_mot');
Dans la seconde commande SET PASSWORD,
remplacez host_name par le nom de l'hôte du
serveur. C'est le nom qui sera spécifié dans la colonne
Host de la ligne du compte
root, et qui n'est pas
localhost. Si vous ne savez pas quel nom
d'hôte c'est, utilisez cette commande avant d'utiliser
SET PASSWORD :
mysql> SELECT Host, User FROM mysql.user;
Recherchez une ligne qui contient root dans
la colonne User et quelque chose d'autre que
localhost dans la colonne
Host. Puis, utilisez la valeur de
Host dans la seconde commande SET
PASSWORD.
L'autre moyen d'assigner des mots de passe à un compte anonyme
est d'utiliser la commande UPDATE pour
modifier la table user directement. Connectez
vous en tant que root et envoyez une commande
UPDATE qui assigne une valeur à la colonne
Password dans les lignes appropriée de la
table user. La procédure est la même sous
Unix et sous Windows. La commande suivante
UPDATE met à jour le mot de passe pour les
deux comptes en même temps :
shell>mysql -u rootmysql>UPDATE mysql.user SET Password = PASSWORD('nouveau_mot')->WHERE User = '';mysql>FLUSH PRIVILEGES;
Après voir fait la mise à jour des mots de passe dans la table
user avec la commande
UPDATE, vous devez demander au serveur de
relire les tables de droits, avec FLUSH
PRIVILEGES. Sinon, les modifications ne seront pas
prises en compte avant le prochain redémarrage du serveur.
Si vous préférez supprimer les comptes anonymes, faîtes ceci :
shell>mysql -u rootmysql>DELETE FROM mysql.user WHERE User = '';mysql>FLUSH PRIVILEGES;
La commande DELETE s'applique à Windows et
Unix. Sous Windows, si vous voulez supprimer uniquement les
comptes anonymes qui ont les mêmes droits que
root, faîtes ceci :
shell>mysql -u rootmysql>DELETE FROM mysql.user WHERE Host='localhost' AND User='';mysql>FLUSH PRIVILEGES;
Ce compte permet un accès anonyme avec les pleins droits : le supprimer améliore la sécurité.
Vous pouvez assigner les mots de passe au compte
root de nombreuses fa¸ons. La discussion
suivante montre trois méthodes :
Utiliser la commande SET PASSWORD
Utiliser la commande en ligne mysqladmin
Utiliser la commande UPDATE
Pour assigner un mot de passe avec la commande SET
PASSWORD, connectez vous en tant que
root et faites deux commandes SET
PASSWORD. Assurez vous de chiffrer le mot de passe
avec PASSWORD().
Pour Windows, faîtes ceci :
shell>mysql -u rootmysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('nouveau_mot');mysql>SET PASSWORD FOR 'root'@'%' = PASSWORD('nouveau_mot');
Pour Unix, faîtes ceci :
shell>mysql -u rootmysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('nouveau_mot');mysql>SET PASSWORD FOR 'root'@'host_name' = PASSWORD('nouveau_mot');
Dans la seconde commande SET PASSWORD,
remplacez host_name par le nom de l'hôte du
serveur. C'est le même nom que celui qui a été utilisé pour
les comptes anonymes.
Pour assigner un mot de passe à root en
utilisant mysqladmin, exécutez les commandes
suivantes :
shell>mysqladmin -u root password "nouveau_mot"shell>mysqladmin -u root -h host_name password "nouveau_mot"
Ces commandes s'appliquent à Windows et à Unix. Dans la
seconde commande, remplacez host_name par le
nom du serveur hôte. Les guillemets doubles autour du mot de
passe ne sont pas nécessaires, mais vous devez les utiliser si
vous avez des espaces ou d'autres caractères spéciaux.
Si vous utilisez un serveur d'une très
vieille version de MySQL, la commande
mysqladmin va échouer avec un message
d'erreur : parse error near 'SET password'.
La solution à ce problème est de changer la version du serveur
MySQL.
Vous pouvez aussi utiliser UPDATE pour
modifier directement la table user. La
commande UPDATE suivante assigne un mot de
passe aux comptes root en même temps :
shell>mysql -u rootmysql>UPDATE mysql.user SET Password = PASSWORD('nouveau_mot')->WHERE User = 'root';mysql>FLUSH PRIVILEGES;
La commande UPDATE s'applique à Windows et
à Unix.
Après modification des mots de passe, vous devrez les fournir
à chaque connexion au serveur. Par exemple, si vous voulez
utiliser la commande mysqladmin pour
éteindre le serveur, vous devez utiliser une commande de cette
forme :
shell> mysqladmin -u root -p shutdown
Enter password: (enter root password here)
Note : si vous perdez votre
mot de passe root après l'avoir configuré,
la procédure pour le remettre à zéro est présentée dans la
section Section A.4.1, « Comment réinitialiser un mot de passe Root oublié ».
Pour créer de nouveaux comptes, utilisez la commande
GRANT. Pour les instructions, voyez
Section 5.6.2, « Ajouter de nouveaux utilisateurs à MySQL ».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
