# MySQL CREATE USER : comment créer un utilisateur dans MySQL ?

Pour pouvoir créer un nouvel utilisateur dans MySQL, vous devez disposer, en plus de l’accès à la base de données concernée, de droits d’administrateur suffisants ou de privilèges de *super user* qui vous permettent de créer des comptes utilisateur et de gérer les autorisations. Vous devez également savoir de quel type d’accès le nouvel utilisateur a besoin : droits de lecture, droits d’écriture ou même droits administratifs.

## Comment créer un utilisateur MySQL avec `CREATE USER` ?

Lors de l’installation 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 utilisateurs afin de les gérer en tant qu’administrateur. Si vous avez besoin d’aide pour l’installation, vous trouverez toutes les informations utiles à ce sujet dans notre tutoriel dédié à MySQL.

Avec votre compte root, vous pouvez créer d’autres comptes utilisateurs ou de nouveaux utilisateurs MySQL et leur attribuer des autorisations. Notez que sur les systèmes Ubuntu avec MySQL 5.7 et versions ultérieures, l’utilisateur root MySQL est configuré par défaut pour s’authentifier non pas avec un mot de passe, mais avec le plugin `auth_socket`. Pour cela, le nom de l’utilisateur système qui appelle le client MySQL doit correspondre au nom de l’utilisateur MySQL indiqué dans la commande. Cela signifie que vous devez faire précéder la commande `sudo` pour avoir accès à votre compte root :

```bash
$ sudo mysql
```

Pour créer un nouvel utilisateur dans MySQL, utilisez la commande `CREATE USER`. Celle-ci vous permet de créer un utilisateur avec un nom d’utilisateur et un mot de passe spécifiques :

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

Remplacez `username` par le nom d’utilisateur de votre choix. Ensuite, indiquez sous `host` le nom respectif de l’hôte à partir duquel le nouvel utilisateur se connectera. Si l’utilisateur ne doit avoir accès qu’à partir de votre serveur Ubuntu local, vous pouvez indiquer `localhost`.

Lors du choix du plugin d’**authentification**, plusieurs possibilités s’offrent à vous : le plugin `auth_socket` offre une sécurité élevée, car les utilisateurs doivent saisir un mot de passe pour accéder à la base de données. Cependant, il empêche les connexions à distance et peut donc entraîner une charge de travail plus importante si des programmes externes doivent interagir avec MySQL. Vous pouvez également omettre la partie de la commande `WITH authentication_plugin` pour que l’utilisateur s’authentifie via le plugin MySQL standard `caching_sha2_password`. Dans ce cas, la commande est la suivante :

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

Après avoir créé un nouvel utilisateur, vous devez lui attribuer des autorisations.

## Attribuer des droits d’utilisateur avec MySQL `CREATE USER`

La création et la gestion des droits d’utilisateur sont essentielles pour la sécurité des données dans MySQL. La commande générale pour l’attribution des droits d’utilisateur est :

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

La valeur `PRIVILEGES` détermine les actions que l’utilisateur 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 utilisateurs de créer une base de données ou une table.
- `SELECT` : permet aux utilisateurs de récupérer des données.
- `INSERT` : permet aux utilisateurs d’ajouter de nouvelles entrées dans les tables.
- `UPDATE` : permet aux utilisateurs de modifier les entrées existantes dans les tables.
- `DELETE` : permet aux utilisateurs de supprimer des entrées de tableau.
- `DROP` : permet aux utilisateurs de supprimer des tables entières de la base de données.

De plus, vous pouvez accorder plusieurs privilèges à la fois au nouvel utilisateur. Pour cela, ils doivent être séparés par une virgule :

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

**Les autorisations 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 utilisateur le droit d’interroger toutes les bases de données et tables avec `SELECT`, d’ajouter de nouvelles entrées avec `INSERT` et de modifier les contributions existantes avec `UPDATE`.

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

Après avoir exécuté l’application `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’autorisations. Vous vous assurez ainsi que les nouvelles autorisations sont mises en vigueur :

```bash
mysql> FLUSH PRIVILEGES;
```

Vous ne devriez toutefois accorder aux utilisateurs que les autorisations dont ils ont besoin. Si vous donnez à un utilisateur un contrôle total, cela peut représenter un **haut risque de sécurité**.

## MySQL `CREATE USER` : retirer les droits d’utilisateur

Pour révoquer des droits d’utilisateur 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` :

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

Pour afficher les permissions actuelles d’un utilisateur, vous pouvez utiliser la commande `SHOW GRANTS` :

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

Pour supprimer un utilisateur, on utilise la commande `DROP` :

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

Cependant, il faut agir avec prudence lorsque vous supprimez des utilisateurs, en particulier s’il s’agit d’utilisateurs avec des privilèges administratifs. Assurez-vous de ne pas faire d’erreur dans la suppression afin d’éviter toute perte de données accidentelle.

Après avoir créé un nouvel utilisateur MySQL et lui avoir accordé des droits, vous pouvez quitter le client MySQL :

```bash
mysql> exit
```


This is a markdown version of: [https://www.ionos.com/fr-be/digitalguide/sites-internet/developpement-web/mysql-create-user/](https://www.ionos.com/fr-be/digitalguide/sites-internet/developpement-web/mysql-create-user/) for AI/LLM consumption.