Gestion des bases de données et des utilisateurs

MySQLBeginner
Pratiquer maintenant

Introduction

Dans l’administration système professionnelle, utiliser l’utilisateur root pour les connexions quotidiennes des applications représente un risque de sécurité majeur. Si un attaquant compromet une application qui utilise le compte root, il obtient le contrôle total de toutes les bases de données du serveur.

La bonne pratique consiste à attribuer à chaque application son propre utilisateur dédié, dont les autorisations sont limitées à sa seule base de données dédiée.

Il s’agit de l’équivalent, au niveau des bases de données, de la séparation des identités des applications au niveau du système d’exploitation. Le contrôle d’accès doit refléter l’objectif de chaque élément, et pas seulement la facilité d’utilisation.

Cette approche applique aux bases de données le principe du moindre privilège que vous avez déjà découvert dans la gestion des utilisateurs Linux. Si le compte d’une application est compromis, la limitation de ses privilèges réduit l’étendue des dommages.

Dans ce laboratoire, vous sécuriserez votre environnement en suivant les procédures standard suivantes :

  1. Créer une nouvelle base de données pour une application fictive.
  2. Créer un compte utilisateur dédié à cette application.
  3. Accorder à cet utilisateur des autorisations uniquement sur sa base de données.
  4. Vérifier la configuration en vous connectant avec le nouvel utilisateur.

Créer une nouvelle base de données

Commencez par vous connecter au serveur MySQL avec des privilèges d’administration afin de créer la nouvelle base de données.

Ouvrez votre terminal et exécutez la commande suivante pour accéder au shell MySQL :

sudo mysql

Remarque : cette commande utilise sudo pour s’authentifier en tant que root via le socket système. Si un mot de passe que vous ne connaissez pas vous est demandé, essayez mysql -u root -p.

Lorsque l’invite mysql> s’affiche, vous pouvez exécuter des commandes SQL.

À ce stade, vous êtes connecté en tant qu’utilisateur administrateur de la base de données, car la création de bases de données est une opération privilégiée. Les comptes d’application ordinaires ne disposent généralement pas de ce niveau de contrôle.

Créez une base de données nommée app_db. Elle servira de conteneur pour les données de notre application.

CREATE DATABASE app_db;

Si l’opération réussit, MySQL répond Query OK. Vous pouvez vérifier que la base de données existe en affichant la liste de toutes les bases :

SHOW DATABASES;

app_db doit apparaître dans la liste.

Créer un utilisateur dédié

Maintenant que la base de données existe, vous devez créer un utilisateur pour la gérer. Nous allons créer un utilisateur nommé app_user.

Dans le même shell MySQL, exécutez la commande suivante :

CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'password';

Décomposition de la commande :

  • 'app_user' : le nom d’utilisateur.
  • '@'localhost' : limite les connexions de l’utilisateur à ce serveur uniquement, ce qui constitue une mesure de sécurité.
  • IDENTIFIED BY 'password' : définit le mot de passe sur « password ».

À ce stade, l’utilisateur existe, mais il ne dispose d’aucune autorisation. Il peut se connecter, mais il ne peut ni lire ni écrire de données.

Ce modèle de sécurité est important à comprendre : l’identité et les privilèges sont deux éléments distincts. La création d’un compte ne lui accorde pas automatiquement le droit d’utiliser tous les objets de toutes les bases de données.

Vous pouvez vérifier que l’utilisateur existe en consultant la table système des utilisateurs :

SELECT User, Host FROM mysql.user WHERE User = 'app_user';

Accorder des autorisations

Vous devez maintenant accorder explicitement à app_user l’autorisation d’utiliser app_db.

Nous voulons accorder à notre utilisateur tous les droits — lecture, écriture et modification des tables — sur app_db.

Exécutez cette commande dans le shell MySQL :

GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';

Décomposition de la syntaxe :

  • GRANT ALL PRIVILEGES : accorde tous les droits d’accès.
  • ON app_db.* : applique ces droits à la base de données app_db et à *, c’est-à-dire à toutes les tables qu’elle contient.
  • TO 'app_user'@'localhost' : indique à qui ces droits sont accordés.

Le modèle database.* est important, car les privilèges peuvent être limités à différents niveaux. Dans MySQL/MariaDB, les droits peuvent être accordés globalement, par base de données, par table et parfois de manière encore plus précise.

Ainsi, app_user dispose de pouvoirs étendus dans app_db, mais d’aucun pouvoir ailleurs.

Pour confirmer que les autorisations ont été attribuées correctement :

SHOW GRANTS FOR 'app_user'@'localhost';

Vérifier l’accès de l’utilisateur

Pour vous assurer que tout fonctionne comme prévu, vous allez vous déconnecter du compte root, puis essayer de vous connecter avec le nouvel utilisateur.

Commencez par quitter la session root :

EXIT;

De retour dans le terminal Linux, connectez-vous en tant que app_user :

mysql -u app_user -p

Lorsque le système vous le demande, saisissez le mot de passe password.

Une fois connecté, vérifiez les bases de données auxquelles vous avez accès :

SHOW DATABASES;

Éléments à vérifier :

  • Vous devez voir app_db et information_schema.
  • Vous ne devez pas voir mysql ni sys.

Cela confirme que les paramètres d’autorisation fonctionnent correctement : l’utilisateur ne voit que les éléments auxquels il est autorisé à accéder.

Cette vérification est essentielle dans le contrôle d’accès. Il ne suffit pas d’exécuter une instruction GRANT ; vous devez confirmer que la vue obtenue du système correspond bien à la conception prévue selon le principe du moindre privilège.

Sélectionnez votre base de données pour terminer le laboratoire :

USE app_db;
EXIT;

Résumé

Dans ce laboratoire, vous avez mis en œuvre avec succès un modèle sécurisé d’accès à une base de données. Vous avez appris à :

  • Créer une nouvelle base de données (app_db).
  • Créer un utilisateur dédié (app_user).
  • Accorder des privilèges précis à l’aide de la commande GRANT.
  • Vérifier que les contrôles d’accès fonctionnent comme prévu.

Le modèle du « moindre privilège » est un principe fondamental de la sécurité des bases de données. Vous devez l’utiliser pour chaque application que vous déployez.