logo MySQL

MySQL : Création des utilisateurs

MySQL


Ce billet est une suite logique du billet : MySQL : Déplacement de l’espace de stockage. Il vous aidera à créer un nouvel utilisateur et à gérer correctement les droits de connexion de celui-ci.

Création d’un super-utilisateur MySQL

Lors de l’installation du serveur, il vous a été demandé un mot de passe pour le super-utilisateur, alias root. Par convention, je vous déconseille d’utiliser ce user pour accéder à vos base de données et vous conseille de créer un utilisateur par administrateur. L’utilisation de ces utilisateurs devra se faire de manière sécurisée et donc de préférence en connexion direct depuis le serveur ou via un tunnel SSH ou VPN (ce sujet ne sera pas traiter dans cet article).

Pour créer votre premier super-utilisateur, vous devrez vous connecter avec le user root depuis le serveur en question via la commande :

$ mysql -u root -p

Pour faire simple, cette commande vous permet d’ouvrir une console mysql avec l’utilisateur root (option -u) et en précisant son mot de passe option (-p). Une invite vous demandera d’inscrire votre mot de passe, ne l’inscrivez donc pas dans la commande. En effet, en tant que pirate, une des premières choses que je ferais c’est le fameux history permettant de connaître toutes les dernières commandes exécutées.

Maintenant que vous êtes sur l’invite MySQL, vous allez pouvoir créer vos super-utilisateurs.

CREATE USER 'superman'@'localhost' IDENTIFIED BY 'mypassword';

Cette commande créée un utilisateur superman pouvant se connecter uniquement depuis localhost et ayant pour mot de passe mypassword.

MySQL différencie l’utilisateur superman@localhost de l’utilisateur superman@1.2.3.4. De part cette différence, vous pouvez très bien attribuer des droits et des mots de passe différents selon la source de connexion de votre utilisateur. Ce qui est très intéressant en matière de sécurité mais aussi risque de vous faire tourner bourrique lorsque vous devez attribuer les droits.

Autoriser la connexion autre que depuis localhost

Comme vu précédemment, vous pouvez créer un utilisateur ayant le droit de se connecter depuis autre part que localhost. Dans ce cas veillez à bien sécuriser la connexion à ce serveur.

CREATE USER 'superman'@'*' IDENTIFIED BY 'mypasswordall';
CREATE USER 'superman'@'192.168.1.*' IDENTIFIED BY 'mypasswordlocal';

Via la première commande, l’utilisateur superman pourra se connecter depuis n’importe quelle adresse IP tant qu’il met le bon mot de passe. L’utilisateur, créé dans la seconde commande, ne pourra se connecter lui que depuis le réseau 192.168.1.0/24, bien sur il lui faudra utiliser le bon mot de passe mypasswordlocal qui est spécifique à cette source.

La création des utilisateurs est une chose mais elle ne permet pas pour autant à vos utilisateurs de vous connecter sur votre serveur. Par défaut (sous Debian), le serveur MySQL est configuré pour n’écouter que l’adresse localhost. Il faut donc configurer celui-ci pour écouter depuis toutes les adresses. Pour ordonner à votre serveur d’écouter toutes les adresses, vous devez modifier la variable bind-address du fichier de configuration /etc/mysql/my.cnf tel que :

# vi /etc/mysql/my.cnf
...
bind-address            = 0.0.0.0

ATTENTION : Une bonne configuration de votre pare-feu sera nécessaire afin de sécuriser votre serveur MySQL.

Attribution des droits

Dernière étape, attribuer les bon droits à vos utilisateurs. Jusqu’à présent, je ne vous ai parlé que de remplaçants du super-utilisateur. Je vais donc continuer comme cela car la gestion des droits MySQL est très complète et il me faudrait un article complet pour vous informer dessus.

Pour donner tous les droits à votre utilisateur sur l’ensemble des bases de données contenus sur votre serveur, vous devrez utiliser les commandes suivantes :

GRANT ALL PRIVILEGES ON *.* TO 'superman'@'localhost';
FLUSH PRIVILEGES;

La première sert à spécifier les droits de l’utilisateur superman se connectant depuis localhost. La seconde sert à enregistrer et appliquer les droits de suite. Comme indiquer plus haut, vous devrez répéter la première commande pour chaque source de connexion de votre utilisateur. Ce qui donne pour les utilisateurs précédemment créés

GRANT ALL PRIVILEGES ON *.* TO 'superman'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'superman'@'192.168.1.*';
GRANT ALL PRIVILEGES ON *.* TO 'superman'@'*';
FLUSH PRIVILEGES;

Si vous voulez attribuer le même mot de passe quel que soit la source de connexion de votre utilisateur, je vous conseille de ne créer que l’utilisateur superman@*. En effet rien de plus déplaisant que de ne pouvoir se accéder à une base de donnée particulière depuis localhost car les droits sur celle-ci n’ont été attribué qu’à l’utilisateur se connectant depuis une adresse externe et non à celui se connectant depuis localhost.

Dans un prochain article, nous verrons comment MySQL vous permet de limiter les droits de manière très précise. En attendant vous trouverez votre bonheur dans la doc MySQL sur Grant

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.