Admin/Dev

04
Juil.
2020

Création d'utilisateurs MySQL en ligne de commande

Publié par sky

MySQL est l'un des systèmes de gestion de base de données le plus utilisé dans le monde, y compris lors de la réalisation de sites internet. MySQL va utiliser une application serveur pour distribuer les données aux différents clients qui s'y connectent. Il est capable de gérer, au sein du même serveur, une multitude de bases de données.

Afin de se connecter au serveur, il faudra disposer d'un compte géré au niveau de MySQL. Par défaut, MySQL ne dispose que d'un compte, root, ayant tous les droits et accès à toutes les bases de données.

Note : Lors de l'utilisation d'un hébergement mutualisé, l'hébergeur fournit une base de données, accessible depuis 1 seul compte, qui dispose, en général, du même nom que la base de données en question. Dans ce cas, la gestion des utilisateurs n'est pas de votre ressort.

Lorsque l'on est seul administrateur d'un serveur web qui dispose de MySQL, on a vite fait, pour gagner du temps, d'utiliser le compte root uniquement, pour l'ensemble des bases de données. Ainsi tous les sites disposent des mêmes identifiants et mots de passe.

Dans les faits, cela fonctionne, mais n'est pas une bonne façon de faire, et pour au moins 2 raisons.

La première est que MySQL dispose d'un nombre maximum de connexions. Une fois ce nombre atteint, il refuse les nouvelles. Mais il faut savoir qu'en fait MySQL acceptera x+1 connections, la dernière étant réservée à l'utilisateur root. Elle permet de se connecter au serveur, en cas de problème (c'est souvent le cas si toutes les connexions disponibles sont occupées), et de le résoudre. Or, si vous connectez, via votre application, via l'utilisateur root, il utilisa cette connexion supplémentaire aussi, et vous n'aurez plus la possibilité de vous connecter.

La seconde ne concerne pas l'utilisateur root en particulier, mais tous les utilisateurs. En créant un compte par site et donc, par base de données, en cas d'intrusion via une faille de sécurité de l'un de vos sites, les données corrompues ou volées ne se limiteront qu'aux seules bases de données accessibles par l'utilisateur MySQL indiqué pour le site en question. Les autres bases resteront protégées (du moins via MySQL).

Pour faire suite au dernier article, l'installation de MariaDB, fork de MySQL, via Homebrew sur macOS, limite, dans sa configuration par défaut, l'utilisation du compte root MySQL à l'utilisateur root de macOS, sans mot de passe. De ce fait, il est nécessaire de créer un ou plusieurs autres utilisateurs pour les utiliser via le serveur web.

 

Créer un utilisateur

Pour commencer, connectez au serveur MySQL sur lequel vous souhaitez ajouter un compte, avec le compte root ou un compte disposant des permissions pour créer d'autres utilisateurs.

Ensuite, créer un utilisateur est assez simple finalement, il faut indiquer le nom du compte, sa localisation et son mot de passe. Par exemple, pour créer un utilisateur "skymac" localement avec un mot de passe "toto", je tape la commande suivante dans le shell de MySQL

CREATE USER 'skymac'@'localhost' IDENTIFIED BY 'toto';

En utilisant l'hôte localhost plutôt que l'adresse IP 127.0.0.1, vous permettrez la connexion au serveur MySQL depuis la socket que nous avions installé dans cet article.

Pour supprimer l'utilisateur, c'est toujours aussi simple

DROP USER ‘skymac’@‘localhost’;

Enfin pour lister la liste des utilisateurs présents sur le serveur MySQL

SELECT user, host FROM mysql.user;

Note : Si votre serveur MySQL est accessible depuis d'autres serveurs que le serveur local, vous pourrez éventuellement créer un autre utilisateur "skymac", en précisant son hôte. Mais, ces deux utilisateurs, malgré un nom identique, seront totalement différents et auront des accès spécifiques.

 

Ajouter les permissions

Maintenant que nous avons notre utilisateur, il faut lui ajouter les permissions, car, en l'état, mis à part se connecter, il n'aura pas le droit de faire grand chose.

MySQL permet de gérer de nombreuses permissions, mais pour l'instant, nous allons simplement donner tous les droits à l'utilisateur sur une base de données. Par exemple, voici comment donner l'ensemble des permissions à notre utilisateur 'skymac' pour la base de données 'skymac'.

GRANT ALL PRIVILEGES ON skymac.* TO 'skymac'@'localhost';

L'utilisateur skymac peut désormais interagir comme il le souhaite sur la base de données. Il peut créer des tables, les modifier ou encore manipuler les données qu'elles contiennent.

Il peut être utilisé dans la configuration d'un site internet pour accéder et manipuler les données.

 

Les permissions plus en détail

Voici l'ensemble des droits qu'il est possible d'appliquer.

  • ALL PRIVILEGES : Applique l'ensemble des permissions au compte sur une ou l'ensemble des bases de données
  • CREATE : Permet la création de nouvelles tables
  • DROP : Permet la suppression de tables
  • INSERT : Permet l'insertion de données dans les tables
  • UPDATE : Permet la mise à jour de données dans les tables
  • DELETE : Permet la suppression de données dans les tables
  • SELECT : Permet la lecture de données dans les tables
  • GRANT OPTION : Permet la modification des permissions sur les comptes présents sur le serveur MySQL.

Il est donc possible d'appliquer des permissions granulaires aux utilisateurs, selon ce que l'on souhaite leur laisser faire.

Dans le cadre indiqué en introduction, notre site internet doit pouvoir faire toutes les actions sur sa base, l'option 'ALL PRIVILEGES' est la plus adaptée.

Mais on peut imaginer avoir besoin de donner un accès en lecture seule à un autre utilisateur, il faudra donc appliquer les droits SELECT seulement

GRANT SELECT ON skymac.* TO 'watcher'@'localhost';

Pour retirer un droit, on utilise la commande REVOKE, par exemple, pour annuler la dernière commande

REVOKE SELECT ON skymac.* FROM 'watcher'@'localhost';

Après l'application de permission, il peut être utile de recharger toutes les permissions afin d'être sur qu'elles soient immédiatement disponibles et appliquées

FLUSH PRIVILEGES;

Enfin, pour voir l'ensemble des permissions attribuée à un utilisateur, ici skymac

SHOW GRANTS for 'skymac'@'localhost';

 

Les permissions au niveau racine

Lors de l'application des permissions à l'utilisateur 'skymac', nous avons bien indiqué que ces dernières n'étaient appliquées que pour la base de données 'skymac'. Il est possible d'attribuer des droits à l'ensemble des bases mais aussi au serveur MySQL lui même.

Ainsi, si j'applique la commande

GRANT ALL PRIVILEGES ON *.* TO 'skymac'@'localhost';

je donnerai à l'utilisateur skymac tous les droits sur toutes les bases, mais aussi au niveau de MySQL.

L'utilisateur skymac disposerait alors de droits similaires à root, sans en être un équivalent. Il peut donc créer de nouvelles bases (CREATE et DROP s'appliquent alors pour les bases de données, en plus des tables), lire et modifier les existantes.

Pour revenir à notre utilisateur surveillant, il est possible de lui donner l'accès en lecture à toutes les bases présentes, mais aussi futures, ainsi qu'aux données de MySQL, avec la commande

GRANT SELECT ON *.* TO 'watcher'@'localhost';
 
 
Commentaires
Aucun commentaire pour le moment.

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Les cookies assurent le bon fonctionnement de nos services. En continuant, vous acceptez leur utilisation sur notre site internet.
Accepter En savoir plus