MySQL : Configuration et sécurisation
Table des matières
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 suivant les distributions, le fichier peut se trouver ailleurs :
CentOS8 : /etc/my.cnf.d/mariadb-server.cnf
Gentoo : /etc/mysql/mariadb.d/50-distro-server.cnf
Debian : /etc/mysql/mariadb.conf.d/50-server.cnf
Par défaut, la configuration de MySQL "fonctionne bien".
Néanmoins, il est possible de changer quelques informations. 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) :
Sous CentOS :
Sous Gentoo :
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 :
Il ne faut pas oublier d'ouvrir le port 3306 (port par défaut) dans le pare-feu.
Avec Firewalld :
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.
Je conseille toujours de créer un deuxième utilisateur avec mot de passe, avec tous les droits pour travailler.
Utilisateur pleins droits pouvant se connecter de n'importe où :
Utilisateur pleins droits pouvant se connecter depuis localhost uniquement :
ici, on va voir comment activer les logs verbeux de mysql.
Pratique si on développe un programme et qu'on ne comprend pas pourquoi les requêtes ne fonctionnent pas.
Au moins, vous verrez ce qui est réellement exécuté.
Dans le paragraphe [mysqld] du fichier de config, ajouter ces lignes :
Le nom du fichier est évidemment personnalisable.
Ensuite, redémarrer le service mysql pour prendre en compte les modifs :
Le fichier est un fichier plein, tout à fait lisible. Il est donc possible de suivre en direct les modifs avec :
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 suivant les distributions, le fichier peut se trouver ailleurs :
CentOS8 : /etc/my.cnf.d/mariadb-server.cnf
Gentoo : /etc/mysql/mariadb.d/50-distro-server.cnf
Debian : /etc/mysql/mariadb.conf.d/50-server.cnf
Par défaut, la configuration de MySQL "fonctionne bien".
Néanmoins, il est possible de changer quelques informations. 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) :
Sous CentOS :
Code BASH :
systemctl restart mariadb.service
Sous Gentoo :
Code BASH :
/etc/init.d/mysql restart
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.
Avec Firewalld :
Code BASH :
firewall-cmd --add-service=mysql --permanent firewall-cmd --reload
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.
Utilisateur pleins droits pouvant se connecter de n'importe où :
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 ;
Utilisateur pleins droits pouvant se connecter depuis localhost uniquement :
Code SQL :
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 ;
Activer les logs verbeux
ici, on va voir comment activer les logs verbeux de mysql.
Pratique si on développe un programme et qu'on ne comprend pas pourquoi les requêtes ne fonctionnent pas.
Au moins, vous verrez ce qui est réellement exécuté.
Dans le paragraphe [mysqld] du fichier de config, ajouter ces lignes :
Code BASH :
general_log = on general_log_file = /var/log/mysql/mysql-debug.log
Le nom du fichier est évidemment personnalisable.
Ensuite, redémarrer le service mysql pour prendre en compte les modifs :
Le fichier est un fichier plein, tout à fait lisible. Il est donc possible de suivre en direct les modifs avec :
Code BASH :
tail -f /var/log/mysql/mysql-debug.log