• Aucun résultat trouvé

Création des premiers droits MySQL

Chapitre 2. Installer MySQL

2.5. Procédure de post-installation

2.5.3. Création des premiers droits MySQL

Le processus d'installation de MySQL passe par la création de la base de donnéesmysql, 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 programmemysql_install_db. Certains assistants d'installation le font pour vous. Les autres vous imposent de le faire manuellement. Pour plus de détails, voyezSection 2.5.2, « Procédures de post-installation sous Unix ».

Le scriptmysql_install_dbdémarre le serveurmysqldet initialise les tables de droits, avec les paramètres suivants :

• Deux comptes MySQLrootsont créés en tant qu'administrateurs ayant tous les droits. Le mot de passe de l'utilisateur initialroot est vide, ce qui permet à n'importe qui de se connecter en tant querootsans mot de passe, pour profiter de tous les droits.

• Sous Windows, un compterootpermet de se connecter depuis l'hôte local, et l'autre depuis n'importe quel hôte.

• Sous Unix, les deux comptesrootsont destinés à être utilisés depuis le compte local. Les connexions doivent être faîtes en spécifiant le nom d'hôtelocalhost, 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, commeroot. L'autre sert aux connexions depuis les hôtes, et a tous les droits pour les basestestou commen¸ant partest.

• 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ôtelocalhost, ou le véritable nom d'hôte, ou l'adresse IP. Ces comptes ont tous les droits dans les basestestou dont le nom commence partest_.

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 comptesroot.

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 comptesroot. 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 commandesSET PASSWORDetUPDATE. Dans les deux cas, assurez-vous de chiffrer les mots avec la fonctionPASSWORD().

Pour utiliserSET PASSWORDsur Windows, faîtes :

shell> mysql -u root

mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('nouveau_mot');

mysql> SET PASSWORD FOR ''@'%' = PASSWORD('nouveau_mot');

Pour utiliserSET PASSWORDsur Unix, faîtes :

shell> mysql -u root

mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('nouveau_mot');

mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('nouveau_mot');

Dans la seconde commandeSET PASSWORD, remplacezhost_namepar le nom de l'hôte du serveur. C'est le nom qui sera spécifié dans la colonneHostde la ligne du compteroot, et qui n'est paslocalhost. Si vous ne savez pas quel nom d'hôte c'est, utilisez cette commande avant d'utiliserSET PASSWORD:

mysql> SELECT Host, User FROM mysql.user;

Recherchez une ligne qui contientrootdans la colonneUseret quelque chose d'autre quelocalhostdans la colonneHost. Puis, utilisez la valeur deHostdans la seconde commandeSET PASSWORD.

L'autre moyen d'assigner des mots de passe à un compte anonyme est d'utiliser la commandeUPDATEpour modifier la tableuser directement. Connectez vous en tant querootet envoyez une commandeUPDATEqui assigne une valeur à la colonnePassword dans les lignes appropriée de la tableuser. La procédure est la même sous Unix et sous Windows. La commande suivanteUPDATE met à jour le mot de passe pour les deux comptes en même temps :

shell> mysql -u root

mysql> 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 tableuseravec la commandeUPDATE, vous devez demander au serveur de relire les tables de droits, avecFLUSH 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 root

mysql> DELETE FROM mysql.user WHERE User = '';

mysql> FLUSH PRIVILEGES;

Installer MySQL

La commandeDELETEs'applique à Windows et Unix. Sous Windows, si vous voulez supprimer uniquement les comptes anonymes qui ont les mêmes droits queroot, faîtes ceci :

shell> mysql -u root

mysql> 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 compterootde nombreuses fa¸ons. La discussion suivante montre trois méthodes :

• Utiliser la commandeSET PASSWORD

• Utiliser la commande en lignemysqladmin

• Utiliser la commandeUPDATE

Pour assigner un mot de passe avec la commandeSET PASSWORD, connectez vous en tant querootet faites deux commandesSET PASSWORD. Assurez vous de chiffrer le mot de passe avecPASSWORD().

Pour Windows, faîtes ceci :

shell> mysql -u root

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('nouveau_mot');

mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('nouveau_mot');

Pour Unix, faîtes ceci :

shell> mysql -u root

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('nouveau_mot');

mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('nouveau_mot');

Dans la seconde commandeSET PASSWORD, remplacezhost_namepar 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 àrooten utilisantmysqladmin, 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, remplacezhost_namepar 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 commandemysqladminva é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 utiliserUPDATEpour modifier directement la tableuser. La commandeUPDATEsuivante assigne un mot de passe aux comptesrooten même temps :

shell> mysql -u root

mysql> UPDATE mysql.user SET Password = PASSWORD('nouveau_mot') -> WHERE User = 'root';

mysql> FLUSH PRIVILEGES;

La commandeUPDATEs'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 commandemysqladminpour é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 passerootaprè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 commandeGRANT. Pour les instructions, voyezSection 5.6.2, « Ajouter de nouveaux utilisateurs à MySQL ».