LinuxÉdu-Québec

Accueil À propos de nous Contact Plan du site

Le mercredi 3 avril 2002, par Benoit St-André

Sécuriser MySQL

Il y a moyen de sécuriser assez rapidement et simplement des bases de données MySQL à l’aide de l’utilitaire PhpMyAdmin. Nous procéderons en quelques petites étapes très simples.

 PhpMyAdmin

Tout d’abord, si ce n’est déjà fait, téléchargez et installez PhpMyAdmin quelque part dans la racine de votre serveur web et décompressez-le à cet endroit.

image 94 x 80

Renommez ensuite le dossier créé en utilisant le mot que vous voudrez car pour atteindre phpmyadmin, vous devrez inscrire l’adresse de votre serveur sous la forme http://lenomdevotre.serveur/ledossierouestphpmyadmin . C’est souvent plus facile d’abréger et d’utiliser sql par exemple comme nom de dossier.

 On ferme la porte aux inconnus !

On commencera ensuite par empêcher tout le monde d’entrer sur MySQL comme dans un moulin ! En effet, lors de l’installation initiale de MySQL, un usager root est créé (différent du root de Linux) et cet usager a tous les droits et n’a pas de mot de passe. Il faut vite changer ça !!!

image 518 x 269

Dans la page d’accueil de PhpMyAdmin, on clique sur "Utilisateurs et privilèges".

image 639 x 360

Le premier utilisateur "Tout serveur" "Aucun mot de passe" n’a aucun privilège. C’est ce qu’on veut.

Il faudrait tout de suite mettre un mot de passe à l’usager root qui a tous les privilèges SQL. Avant, on va enlever les usagers inutiles (ceux sur lesquels j’ai mis un gros X rouge). Il suffit de cliquer sur "Effacer". On va même vous demander une confirmation :

image 463 x 62

Ils sont gentils, non ? ;-) Ensuite, plus qu’à cliquer sur "Modifier" à l’utilisateur root pour lui ajouter un mot de passe, comme dans la saisie d’écran ci-dessous. Il faut toujours cliquer "Exécuter" juste en-dessous des changements que l’on a fait.

image 653 x 450

On peut ensuite cliquer sur "Retour" et "Recharger MySQL" pour que les changements prennent effet. Ça devrait nous donner ce genre de résultat :

image 677 x 139

Normal, car PhpMyAdmin s’installe en mode "config" qui ne nécessite pas de code ni de mot de passe. Il faudra aller faire une petite modification dans le fichier config.inc.php situé dans le dossier de PhpMyAdmin. Il faut modifier la variable $cfg_auth_type pour la placer à "cookie" au lieu de "config". Il faut donc modifier le fichier config.inc.php situé dans le dossier de PhpMyAdmin.

image 839 x 370

NB : Depuis la version 2.5.3, il faut également compléter une ligne qui va permettre l’encryption du mot de passe dans le cookie à l’aide d’une "passphrase" si vous utilisez le mode ’cookie’ Voici un exemple avec la passphrase "abcd" : [1]


/**
* The 'cookie' auth_type uses blowfish algorithm to encrypt the password.
* If at least one server configuration uses 'cookie' auth_type,
* enter here a passphrase that will be used by blowfish.
*/
$cfg['blowfish_secret'] = 'abcd';

Ensuite, tout est prêt. On n’a qu’à recharger la page, et on nous demande notre nom d’utilisateur et notre mot de passe. Tous les usagers de MySQL pourront utiliser ce PhpMyAdmin et n’auront accès qu’à la ou les bases de données sur lesquelles ils ont des droits.

Pour donner une base de données à un utilisateur, on devra alors dans l’ordre
 Entrer avec le code root dans phpmyadmin
 Créer la base de données pour l’utilisateur
 Aller via l’accueil dans "Utilisateurs et privilèges"
 Créer un nouvel usager pour le serveur localhost avec aucun privilège (car ces privilèges sont pour TOUTES les bases de données)
 Recharger MySQL
 Cliquer sur "Autres privilèges" pour l’utilisateur en question
 Donner les privilèges voulus sur la base de données ou les tables désirées.

Bon MySQL !!!

Notes

[1] Merci à Stéphane Weber pour le commentaire

30 Messages de forum

  • 5 septembre 2002 18:57, par Eric
    Un grand merci ! Je voulais installé une petite application qui me demandais un mot de passe pour ma base de donnée. Seulement voilà à la lecture de plusieurs articles, par défaut mysql n’as pas de mot de passe. Et pas moyen de mettre la main sur un article concret à ce sujet. Mais heureusement sur un forum, une personne à pu m’envoyer vers votre site, qui m’a beaucoup aider. C’est écrit simplement et les novices comme moi s’en sortent très bien. Encore merci, continuez comme ça, je vous garde dans mes favoris. Eric
  • 8 janvier 2003 14:31, par Erwan
    merci pour ce tuto ! simple et clair ! j’avais du mal à comprendre le principe des "utilisateurs et privilèges", et bien maintenant, c’est bon, merci à toi ! je vais pouvoir passer à la deuxième phase, la securité pur de l’intranet !
  • 18 mars 2003 04:45

    Super c’est exactement ce que je cherchais !!!

    Merci beaucoup ...

  • 28 mars 2003 10:47, par Marcoco

    J’ai passé deux jours (chacun son rythme) à comprendre comment gérer le multi-users protégé par mot de passe dans Phpmyadmin.

    Je n’avais rien trouvé qui explique vraiment clairement la procédure.

    C’est chose faîte grâce à votre article que j’ai imprimé et mis au chaud dans mon dossier.

    Merci, donc, pour cet éclaircissement.

  • 1er juin 2003 23:02, par paparoot

    La vache ! Ça fait un moment que je cours après un article comme ça. Un truc simple mais concis. La plupart des documentations trouvables ne font que répéter la documentation MySQL ... Grace à votre article, j’ai réellement pu aborder, et ce de manière pratique, la gestion des droits d’accès d’une base de données MySQL.

    Je vous remercie beaucoup pour votre démarche. Je pense que plus d’articles dans ce sens devraient permettre à une majorité d’entre nous de s’affranchir enfin des sempiternelles théories qui ne nous apportent pas grand chose, si ce n’est que d’avoir de la confiture à étaler lors des conversations techniques. Bref, 1000 merci encore ! :)

  • 4 juin 2003 17:53, par Anakin
    Après bien des errements et des crises de nerfs :)) j’ai ENFIN réussi à faire ce que je voulais de mon serveeur MySQL. Un GRAND merci pour cet article simple, concis, précis et... hyper-utile :)
  • 19 juin 2003 03:12, par Herve
    Bravo pour cet article simple mais terriblement efficace et d’un grand secours puisque toutes les docs trouvées jusqu’ici y compris la doc officielle de PhpMyAdmin sont fausses sur ce sujet (aucun nom de login ou de mot de passe n’est à mettre dans le fichier de config, et aucun utilisateur ayant accès en select aux tables de mysql n’est à créer dans mysql !).
  • 18 juillet 2003 09:26, par zorg
    merci simple rapide et efficace
  • 10 août 2003 09:12, par Trasher
    Merci beaucoup pour votre article d’une grande aide....
  • 7 septembre 2003 12:58
    J’ai un gros problème.. Je crois que quelqu’un a réussi a trouver mon password de mysql qui est pourtant bien difficile : genre Bg6egJRFi98 alors je voudrais savoir où se situe l’erreur . En effet le mot de passe se trouve dans le fichier config.php mais comme c en php on ne sait pas le lire normalement.. Que puis je faire pour ne plus qu’un inconnu accède à ma base de données ??? Merci de me répondre à chavre@hotmail.com
  • 23 septembre 2003 04:19, par jerome
    je pense que la personne a pu lire le password avec la fonction show_source(config.inc.php)
  • 24 septembre 2003 19:14, par nash00fr

    mouaif la secu par cookie bof

    et la secu avec http ???

    bref a suivre

  • 30 octobre 2003 06:00, par Chouchou
    Vraiment cool ton tutorial ... je pédalais dans la choucroute depuis un moment !!! Merci
  • 5 novembre 2003 10:38
    Le meilleur moyen de sécuriser l’accès a des documents est d’utiliser des restrictions sur l’accès aux répertoires. Pour cela utilises les fichiers .htaccess et .htpasswd tu trouveras pleins de sites qui parlent de la configuration de ces fichiers et ensuite tu n’auras plus de problèmes ....
  • 6 novembre 2003 13:19, par Benoit St-André

    Attention, cependant ça ne règle pas le problème mentionné ci-haut.

    Si la personne fait un show_source en php, elle va quand même pouvoir voir le document. L’important alors, si on est sur un serveur partagé, c’est

    - d’avoir confiance aux autres
    - ou encore, de fonctionner avec le SAFE_MODE (de php, dans la configuration de /etc/php.ini qui empêche ce genre de choses)

  • 18 novembre 2003 03:46, par isa
    Salut merci pour ce tuto mais pouvez vous m’eclairer ? Quand on met un pass a root dans phpmyadmin, il ne faut pas mettre (en mode http) de mot de passe dans le config.php de notre appli en php ? ca n’a pas de lien ? ce n’est pas le meme root ? $db_login = "root" ; $db_password = "" ; ??? merci isa150183@aol.com
  • 3 janvier 2004 16:26, par Marc
    Merci pour cet article fort bien détailé, mais j’ai tout de même un problème. sur l’ordinateur exécutant MySQL pas de problème pour s’identifier par contre dés qu’un autre ordinateur essait de se connecter il se fait rambarré avec un message : "Forbidden You don’t have permission to access /mysql/ on this server Apache/1.3.24 Server at localhost Port 80" comment peux resoudre ce pb ? (je suis sous win 2K avec easyphp)
  • 4 janvier 2004 12:18, par Benoit St-André

    Ça dépend... Est-ce que vous avez installé PhpMyAdmin ou vous avez utilisé celui fourni avec EasyPhp ?

    Ça ressemble à un problème de permissions. Essayez pour voir d’ajouter index.php à la fin de votre url (il se peut qu’il ne reconnaisse pas par défaut les .php comme des index possibles).

    L’autre possibilité, c’est que phpmyadmin ou que apache soit configuré pour jeter toutes les requêtes venant d’un autre poste que lui-même. Mais pour ça, il faudrait que vous ayiez fait quelque chose en ce sens...

  • 6 janvier 2004 15:47, par Louys Jean-Philippe (remplacer -AT- par @)

    pour ajouter un utilisateur local ayant acces a MySQL :

    GRANT ALL ON NOMDEBASE.* TO Utilisateur@localhost IDENTIFIED BY ’UnBonPassword’ ; FLUSH PRIVILEGES ;

    mais cela ne donne acces que depuis le localhost, pour que cet utilisateur ai acces depuis un autre host :

    GRANT ALL ON NONDEBASE.* TO Utilisateur@’%’ IDENTIFIED BY ’UnBonPassword’ ; FLUSH PRIVILEGES ;

    si l’utilisateur doit avoir tous les pouvoirs, ajouter WITH GRANT OPTION apres le mot de passe

    EX : GRANT ALL ON NONDEBASE.* TO Utilisateur@’%’ IDENTIFIED BY ’UnBonPassword’ WITH GRANT OPTION ;

  • 6 janvier 2004 15:54, par Louys Jean-Philippe (remplacer -AT- par @)

    Dans le cas ou vous desirez donner plusieurs acces a plusieurs utilisateurs ayant chaqu’un leur bases de données :

    modifiez le config de phpmyadmin comme suit

    $cfgServers[1][’auth_type’] = ’http’ ; // Authentication method (config, http or cookie based) ?

    $cfgServers[1][’user’] = ’$HTTP_AUTH_USER’ ; // MySQL user

    $cfgServers[1][’password’] = ’$HTTP_AUTH_PASS’ ; // MySQL password (only needed with ’config’ auth)

    cela provoque une authentification http et l’utilisateur n’a access qu’a ces propres bases de données sans voir les autres :)

  • 8 mars 2004 07:13, par x3c-furious

    Le problème vient de la configuration d’apache.

    Dès que vs essayer d’accéder à Mysql via l’adresse : Ip/mysql/ par exemple, le httpd.conf (fichier de configuratoin d’apache) au niveau de la configuration de l’alias /mysql/, doit etre écrit de la maniere suivante :

    Allow from all ou allow from Ip du poste distant...Comme cela on autorise l’accès à mysql si l’utilisateur est sur le poste dont l’Ip a été renseigné !

    Ex :

    alias /mysql/ .. ... allow from 10.155.107.131 deny from all ...

  • 26 avril 2004 16:22, par bravo pour votre site !
    bravo pour votre site !
  • 9 juin 2004 10:03, par charlonet

    Salut, Bôrrô de rémerciements pour ton tuto. Il est super cool , super intéressant, ... Encore merci

    Paix & Joie

    Vous avez réçu gratuitement donnez donc gratuitement (Mt 10,8)

  • 20 novembre 2004 05:25

    Un tout grand merci

    Vous me sauvez ;)

  • 25 novembre 2004 08:23, par nasamad
    Vraiment sympa ce tuto... mais moi j’ai un probleme. j avais créé une base de données avec le phpMyAdmin2.2.6 fourni par Easy php sous Windows. maintenant je veux pouvoir gérer la base sous Linux... je viens d’installer le phpMyAdmin2.6.0. mais il me semble qu’il y incompatibilité...quand je sélectionne ma base au niveau de "base de données" je lis ce message d’erreur "Certaines fonctionnalités ayant trait aux tables reliées sont désactivées. Pour une analyse du problème, cliquez ici." Mais quand je clique c’est la migraine qui commence...quelqu’un peut il m’aider... merci
  • 19 janvier 2005 05:36, par FUNA
    merci pour le guide
  • 31 mai 2005 13:24
    Bonjour, moi aussi j’ai eu le même problème, mais j’arrive pas à le résoudre, pourriez vous m’indiquer la solution que vous avez appliqué , mon email : casa_on_line@yahoo.fr, merci.
  • 3 juin 2005 07:29
    Si c’est bien le même, il faut mettre le mot de passe dans $db_password
  • 28 juillet 2005 09:46, par boguet

    Bonjour,

    Je trouve ce tutorial très bien expliqué ! Bravo ! Mais j’ai tout de même une question : Quand je me rends sur phpmyadmin d’un de mes hébergement, je remarque dans la partie SQL (où il y a : Structure, SQL, Exporter, Opérations etc ...) Et bien tout en bas, il y a : Jeu de caractères du fichier : [liste déroulante] où l’on peut choisir son mode d’importation. Mais le problème est que quand j’ai installer phpmyadmin, il n’y a pas cette ligne qui me sert énormément !

    Merci pour vos réponses !

    PS : Veuillez répondre sur mon e-mail à l’adresse suivante : gta.vice.city7@caramail.com

  • 14 novembre 2005 12:46, par fabrice

    Merci pour toutes ces informations

    F


Applications | LinuxÉdu-Québec | Revue de presse | Projets | Événements - colloques | Réflexion et opinion | Système d’exploitation