Serveurs Base de données

MySQL : Configuration et sécurisation

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

logo-mysql



Introduction



Bien souvent, le répertoire de travail de mysql se trouve dans /var/lib/mysql
Le principal fichier de configuration de mysql est my.cnf mais maintenant il se trouve dans /etc/mysql/mariadb.d/ ou /etc/mysql/mariadb.conf.d/ sous le nom 50-server.cnf ou 50-distro-server.cnf.

Par défaut, la configuration de MySQL "fonctionne bien".

Néanmoins, il est possible de changer quelques informations dedans. Cela peut être utile dans certains cas.

Après chaque modification, il est évidemment nécessaire de redémarrer le service mysql pour prendre en compte les modifications (une des 3 commandes suivant la distribution) :

Code BASH :
/etc/init.d/mysqld restart

Code BASH :
service mysqld restart

Code BASH :
systemctl restart mysqld.service


Accéder à la base depuis l'extérieur



Si on souhaite accéder à nos bases mysql depuis l'extérieur, il est nécessaire de commenter la ligne skip-networking et de modifier la ligne bind-address :
Code TEXT :
#skip-networking
bind-address=0.0.0.0


Il ne faut pas oublier d'ouvrir le port 3306 (port par défaut) dans le pare-feu.

Une seule IP peut être définie dans la ligne bind-address. Jouer alors avec le paramétrages du pare-feu pour autoriser certaines IP.

Créer un deuxième utilisateur avec les pleins droits



Je conseille toujours de créer un deuxième utilisateur avec mot de passe, avec tous les droits pour travailler (un utilisateur en localhost et partout):
Code SQL :
 
CREATE USER 'utilisateur'@'%' IDENTIFIED BY 'motdepasse'; GRANT ALL PRIVILEGES ON * . * TO 'utilisateur'@'%' IDENTIFIED BY 'motdepasse' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'utilisateur'@'localhost' IDENTIFIED BY 'motdepasse'; GRANT ALL PRIVILEGES ON * . * TO 'utilisateur'@'localhost' IDENTIFIED BY 'motdepasse' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;


Pour un utilisateur sur localhost (pour un site par exemple) mais que sur une seule base de données (ici "base") :

Code SQL :
CREATE USER 'utilisateur'@'localhost' IDENTIFIED BY 'motdepasse'; GRANT ALL PRIVILEGES ON base . * TO 'utilisateur'@'localhost' IDENTIFIED BY 'motdepasse' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;