Comment accorder (grant) les privilèges à l'utilisateur root dans MySQL ?

Le système de gestion de base de données SQL a connu de nombreuses évolutions au cours de sa vie. D'abord créé par Sun, il est maintenant géré par la société Oracle suite à un rachat. La version 8 a apporté de nombreux changements. Parmi ceux-ci, la gestion des utilisateurs a été modifiée. On ne procède plus de la même façon pour créer un utilisateur et lui donner des privilèges.

Avant la version 8 de MySQL, la création d'un utilisateur était effectuée avec la commande "GRANT". Elle créait donc l'utilisateur s'il n'existait pas et lui donnait les privilèges en même temps.

-- Avant MySQL 8, créer l'utilisateur root et lui donner tous les privilèges
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION,

Depuis la version 8, si vous essayez cette commande sans avoir créé l'utilisateur, vous obtiendrez un message d'erreur : "ERROR 1410 (42000): You are not allowed to create a user with GRANT". Pour créer un utilisateur, il faut utiliser la commande "CREATE USER". On précise l'utilisateur suivi du caractère "@" et le serveur. On ajoute ensuite le mot de passe après la clause "IDENTIFIED BY". La requête "GRANT" doit suivre après, pour donner les privilèges à l'utilisateur. Pour finir, n'oubliez pas de recharger la table des privilèges avec la commande "FLUSH PRIVILEGES,".

-- Création de l'utilisateur
CREATE USER 'root'@'%' IDENTIFIED BY 'root',
-- Attribution des privilèges
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION,
-- Rechargement de la table des privilèges
FLUSH PRIVILEGES,

Il n'est par contre pas recommandé d'accorder le privilège "WITH GRANT OPTION" à un autre utilisateur que celui par défaut, car l'utilisateur par défaut de la base dans la version 8 de MySQL ne peut pas être utilisé par un site, ce qui garantit une protection contre le piratage.