Pour pouvoir créer un nouvel uti­li­sa­teur dans MySQL, vous devez disposer, en plus de l’accès à la base de données concernée, de droits d’ad­mi­nis­tra­teur suf­fi­sants ou de pri­vi­lèges de super user qui vous per­met­tent de créer des comptes uti­li­sa­teur et de gérer les au­to­ri­sa­tions. Vous devez également savoir de quel type d’accès le nouvel uti­li­sa­teur a besoin : droits de lecture, droits d’écriture ou même droits ad­mi­nis­tra­tifs.

Comment créer un uti­li­sa­teur MySQL avec CREATE USER ?

Lors de l’ins­tal­la­tion du système de gestion de base de données, MySQL crée un compte racine (root) qui vous permet d’avoir un contrôle total sur vos bases de données, tables et uti­li­sa­teurs afin de les gérer en tant qu’ad­mi­nis­tra­teur. Si vous avez besoin d’aide pour l’ins­tal­la­tion, vous trouverez toutes les in­for­ma­tions utiles à ce sujet dans notre tutoriel dédié à MySQL.

Avec votre compte root, vous pouvez créer d’autres comptes uti­li­sa­teurs ou de nouveaux uti­li­sa­teurs MySQL et leur attribuer des au­to­ri­sa­tions. Notez que sur les systèmes Ubuntu avec MySQL 5.7 et versions ul­té­rieures, l’uti­li­sa­teur root MySQL est configuré par défaut pour s’au­then­ti­fier non pas avec un mot de passe, mais avec le plugin auth_socket. Pour cela, le nom de l’uti­li­sa­teur système qui appelle le client MySQL doit cor­res­pondre au nom de l’uti­li­sa­teur MySQL indiqué dans la commande. Cela signifie que vous devez faire précéder la commande sudo pour avoir accès à votre compte root :

$ sudo mysql
bash

Pour créer un nouvel uti­li­sa­teur dans MySQL, utilisez la commande CREATE USER. Celle-ci vous permet de créer un uti­li­sa­teur avec un nom d’uti­li­sa­teur et un mot de passe spé­ci­fiques :

mysql> CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
bash

Remplacez username par le nom d’uti­li­sa­teur de votre choix. Ensuite, indiquez sous host le nom respectif de l’hôte à partir duquel le nouvel uti­li­sa­teur se con­nec­tera. Si l’uti­li­sa­teur ne doit avoir accès qu’à partir de votre serveur Ubuntu local, vous pouvez indiquer localhost.

Lors du choix du plugin d’au­then­ti­fi­ca­tion, plusieurs pos­si­bi­li­tés s’offrent à vous : le plugin auth_socket offre une sécurité élevée, car les uti­li­sa­teurs doivent saisir un mot de passe pour accéder à la base de données. Cependant, il empêche les con­nexions à distance et peut donc entraîner une charge de travail plus im­por­tante si des pro­grammes externes doivent interagir avec MySQL. Vous pouvez également omettre la partie de la commande WITH authentication_plugin pour que l’uti­li­sa­teur s’au­then­ti­fie via le plugin MySQL standard caching_sha2_password. Dans ce cas, la commande est la suivante :

mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
bash

Après avoir créé un nouvel uti­li­sa­teur, vous devez lui attribuer des au­to­ri­sa­tions.

Nom de domaine
Votre domaine en un clic
  • 1 cer­ti­fi­cat SSL Wildcard par contrat
  • Fonction incluse Domain Connect pour une con­fi­gu­ra­tion DNS sim­pli­fiée

Attribuer des droits d’uti­li­sa­teur avec MySQL CREATE USER

La création et la gestion des droits d’uti­li­sa­teur sont es­sen­tielles pour la sécurité des données dans MySQL. La commande générale pour l’at­tri­bu­tion des droits d’uti­li­sa­teur est :

mysql> GRANT PRIVILEGES ON database.table TO 'username'@'host';
bash

La valeur PRIVILEGES détermine les actions que l’uti­li­sa­teur peut effectuer dans la base de données et la table indiquées. Vous pouvez notamment remplacer cette valeur par les commandes suivantes :

  • CREATE : permet aux uti­li­sa­teurs de créer une base de données ou une table.
  • SELECT : permet aux uti­li­sa­teurs de récupérer des données.
  • INSERT : permet aux uti­li­sa­teurs d’ajouter de nouvelles entrées dans les tables.
  • UPDATE : permet aux uti­li­sa­teurs de modifier les entrées exis­tantes dans les tables.
  • DELETE : permet aux uti­li­sa­teurs de supprimer des entrées de tableau.
  • DROP : permet aux uti­li­sa­teurs de supprimer des tables entières de la base de données.

De plus, vous pouvez accorder plusieurs pri­vi­lèges à la fois au nouvel uti­li­sa­teur. Pour cela, ils doivent être séparés par une virgule :

mysql> GRANT SELECT, INSERT, UPDATE ON database.table TO 'username'@'host';
bash

Les au­to­ri­sa­tions pour toutes les bases de données ou tables peuvent également être accordées en une seule commande, en tapant * à la place du nom de la base de données et de la table. Par exemple, la commande suivante donne à un uti­li­sa­teur le droit d’in­ter­ro­ger toutes les bases de données et tables avec SELECT, d’ajouter de nouvelles entrées avec INSERT et de modifier les con­tri­bu­tions exis­tantes avec UPDATE.

mysql> GRANT SELECT, INSERT, UPDATE ON *.* TO 'username'@'host';
bash

Après avoir exécuté l’ap­pli­ca­tion GRANT ou CREATE USER dans MySQL, vous pouvez utiliser la commande FLUSH PRIVILEGES pour mettre à jour la base de données afin de recharger les tables d’au­to­ri­sa­tions. Vous vous assurez ainsi que les nouvelles au­to­ri­sa­tions sont mises en vigueur :

mysql> FLUSH PRIVILEGES;
bash

Vous ne devriez toutefois accorder aux uti­li­sa­teurs que les au­to­ri­sa­tions dont ils ont besoin. Si vous donnez à un uti­li­sa­teur un contrôle total, cela peut re­pré­sen­ter un haut risque de sécurité.

MySQL CREATE USER : retirer les droits d’uti­li­sa­teur

Pour révoquer des droits d’uti­li­sa­teur dans MySQL, on utilise la commande REVOKE. La syntaxe est similaire à celle de la commande GRANT. Cependant, dans ce cas, vous devez utiliser FROM au lieu de TO :

mysql> REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';
bash

Pour afficher les per­mis­sions actuelles d’un uti­li­sa­teur, vous pouvez utiliser la commande SHOW GRANTS :

mysql> SHOW GRANTS FOR 'username'@'host';
bash

Pour supprimer un uti­li­sa­teur, on utilise la commande DROP :

mysql> DROP USER 'username'@'localhost';
bash

Cependant, il faut agir avec prudence lorsque vous supprimez des uti­li­sa­teurs, en par­ti­cu­lier s’il s’agit d’uti­li­sa­teurs avec des pri­vi­lèges ad­mi­nis­tra­tifs. Assurez-vous de ne pas faire d’erreur dans la sup­pres­sion afin d’éviter toute perte de données ac­ci­den­telle.

Après avoir créé un nouvel uti­li­sa­teur MySQL et lui avoir accordé des droits, vous pouvez quitter le client MySQL :

mysql> exit
bash
Aller au menu principal