Protéger sa base de données MySQL : utilisateurs aux droits restreints

Par défaut, l’installation d’EasyPHP crée, dans MySQL, un usager root sans mot de passe. Ceci est correct pour un travail sur un serveur de développement local comme EasyPHP mais il serait très dangereux de travailler ainsi sur un site Web en ligne. 

▼Publicité

Sur un serveur MySQL disponible sur internet, il faut absolument prendre les précautions suivantes.

Remplacer l'usager root

Lorsque le serveur MySQL est disponible en ligne, il est très dangereux de conserver un usager nommé root. C'est encore pire si cet usager n'a pas de mot de passe. Voici donc comment corriger cette situation.

  • Créez un nouvel usager possédant tous les droits sur toutes les BD et donnez-lui un mot de passe. Ne touchez pas à l'usager root tant que vous ne serez pas rendu à l'étape qui dit de l'effacer...

    Vous pouvez utiliser phpMyAdmin pour créer l'usager graphiquement ou, plus simplement, travailler à la ligne de commande. Les commandes suivantes vous permettront d'y arriver. Vous prendrez soin de changer monsuperusager et motdepasseenclair par les valeurs appropriées.

    Ligne de commande MySQL ou Fenêtre SQL dans phpMyAdmin

    GRANT ALL PRIVILEGES ON *.* TO 'monsuperusager'@'localhost' IDENTIFIED BY 'motdepasseenclair' WITH GRANT OPTION;

    GRANT ALL PRIVILEGES ON *.* TO 'monsuperusager'@'%' IDENTIFIED BY 'motdepasseenclair' WITH GRANT OPTION;

    Notez que si vous ne prévoyez pas effectuer de manipulations à distance (via le Web) dans vos bases de données, l'usager monsuperusager@% n'est pas nécessaire. Dans ce cas, vous pouvez augmenter la sécurité en ne créant pas d'usager monsuperusager@%.

  • Avant de poursuivre, effectuez les vérifications suivantes :
    • Loguez-vous sous root à la ligne de commande MySQL ou dans phpMyAdmin.
    • Exécutez la commande suivante :

      Fenêtre SQL dans phpMyAdmin (MySQL)

      SELECT * FROM mysql.user;

      ou

      Ligne de commande MySQL

      SELECT * FROM mysql.user \G;

      Assurez-vous que vous voyez bel et bien votre nouvel usager pour le host localhost et que tous les privilèges sont à Y, incluant le privilège GRANT. Si vous prévoyez effectuer des manipulations à distance (via le Web) dans vos bases de données, vous devez avoir un second usager portant le même nom et ayant les mêmes privilèges. Cette fois, le host doit être %.

  • Pour pouvoir accéder à phpMyAdmin avec votre nouvel usager :
    • Fermez tous les onglets de votre navigateur qui affichent phpMyAdmin et videz le cache du navigateur.
    • La configuration de phpMyAdmin est réalisée en éditant le fichier conf.inc.php. Repérez ce fichier sur votre ordinateur et ouvrez-le dans l'éditeur de votre choix (ex : Notepad++).

    • Deux options s'offrent à vous : demander à phpMyAdmin d'afficher une fenêtre de login vous permettant de changer d'utilisateur au besoin ou utiliser le même utilisateur à chaque fois.
      • Pour avoir une fenêtre de login vous permettant de changer d'utilisateur au besoin :
        • Repérez la ligne suivante :
          conf.inc.php

          $cfg['Servers'][$i]['auth_type'] = 'config';

        • Remplacez 'config' par 'http'.
      • ou, si vous préférez que phpMyAdmin utilise toujours le même usager :
        • Repérez la ligne suivante : (si elle n'est pas présente, copiez-la sous la ligne $cfg['Servers'][$i]['auth_type'] = 'config';)
          conf.inc.php

          $cfg['Servers'][$i]['user'] = 'root';

        • Remplacez 'root' par l'usager souhaité.
        • Repérez la ligne suivante : (si elle n'est pas présente, copiez-la sous la ligne $cfg['Servers'][$i]['auth_type'] = 'config';)
          conf.inc.php

          $cfg['Servers'][$i]['password'] = '';

        • Entrez votre mot de passe en clair entre les apostrophes.
  • Ouvrez à nouveau phpMyAdmin et vérifiez sur la page d'accueil que le bon usager apparaît dans la zone « Serveur de base de données ».
  • Vous pouvez maintenant détruire les usagers superflus :
    • Détruisez tous les usagers root. Il y en a généralement trois :
      • root@127.0.0.1 -> pour se brancher localement (IPv4)
      • root@::1 -> pour se brancher localement  (IPv6)
      • root@localhost -> nom d'hôte donnant accès à 127.0.0.1 ou à ::1 selon la configuration du système.
    • Vous pouvez également détruire les usagers anonymes. Vous pourriez par exemple retrouver l'usager « N'importe quel@% », « N'importe quel@localhost » ou un usager dont le nom est à blanc.

    Usager détenant des droits sur une seule base de données

    L'administrateur MySQL ne doit jamais être utilisé par votre site Web pour accéder à la base de données. Vous devez donc créer un autre usager qui aura des droits limités sur cette base de données. Il n'aura aucun droit sur les autres bases de données présentes sur le serveur.

    • Cet usager doit absolument être présent pour le host % et pour le host localhost.
    • Il aura besoin des droits SELECT, UPDATE, DELETE, INSERT, DROP, CREATE et EXECUTE sur cette BD (et non comme privilèges globaux).
    • Vous pouvez le créer graphiquement dans phpMyAdmin ou, plus simplement, à la ligne de commande MySQL comme suit :
      Ligne de commande MySQL ou Fenêtre SQL dans phpMyAdmin

      GRANT USAGE ON mabd.* TO 'monusager'@'localhost' IDENTIFIED BY 'motdepasseenclair';

      GRANT USAGE ON mabd.* TO 'monusager'@'%' IDENTIFIED BY 'motdepasseenclair';

      GRANT SELECT, UPDATE, DELETE, INSERT, DROP, CREATE, EXECUTE ON mabd.* TO 'monusager'@'localhost';

      GRANT SELECT, UPDATE, DELETE, INSERT, DROP, CREATE, EXECUTE ON mabd.* TO 'monusager'@'%';

    • Pour vérifier les droits de l'usager sur les différentes bases de données, exécutez la commande suivante :

      Fenêtre SQL dans phpMyAdmin (MySQL)

      SELECT * FROM mysql.db;

      ou

      Ligne de commande MySQL

      SELECT * FROM mysql.db \G;

      Assurez-vous que votre nouvel usager possède les droits requis sur la base de données utilisée par votre site Web ET SUR AUCUNE AUTRE BASE DE DONNÉES.

    • Et pour vous assurer que votre nouvel usager n'a pas reçu les droits globaux par inadvertance, exécutez la commande suivante :

      Fenêtre SQL dans phpMyAdmin (MySQL)

      SELECT * FROM mysql.user;

      ou

      Ligne de commande MySQL

      SELECT * FROM mysql.user \G;

      Cette fois, tous les privilèges doivent être à N pour votre nouvel usager.

    Pour plus d'information

    « 5.6.2. Ajouter de nouveaux utilisateurs à MySQL ». MySQL. http://dev.mysql.com/doc/refman/5.0/fr/adding-users.html

    « 2.10.2. Securing the Initial MySQL Accounts ». MySQL. http://dev.mysql.com/doc/refman/5.7/en/default-privileges.html

    « Gestion des utilisateurs MySql ». Flux BB. http://fluxbb.fr/aide/doku.php?id=mysql_gestion_utilisateurs

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories