Activer la connexion à distance de MySQL sur votre Raspberry Pi

Aujourd’hui, nous allons nous intéresser à MySQL et plus précisément à comment activer la connexion à distance à la base, c’est à dire depuis une autre machine non connectée à notre Raspberry Pi.
La connexion à distance peut être très utilise si vous disposez d’un serveur sans base de données interne.
En effet, vous pouvez choisir de séparer ces deux parties afin d’alléger votre serveur en terme de requête. C’est notamment ce que font les hébergeurs, sur certains serveurs mutualisés.
De plus, ouvrir la connexion à distance permet de se connecter au service MySQL depuis une autre IP (si celle-ci en à l’autorisation) et ainsi gérer sa base de données sans passer par SSH ou autre.
Pour ce tutoriel nous considérons que vous avez déjà une Raspberry Pi avec un serveur MySQL installé.

Création d’un utilisateur MySQL dédié

Nous allons devoir dans un premier temps nous connecter à la Raspberry Pi et ensuite nous connecter à MySQL afin de pouvoir créer un nouvel utilisateur destiné à gérer une base à distance.
Nous tenons toutefois à vous mettre en garde, créer un connexion à distance augmente les risques d’attaques, utilisez donc un nom d’utilisateur et un mot de passe compliqué et évitez de donner à un utilisateur les droits sur toutes vos tables (préférez la création d’un utilisateur dédié par base), les serveurs sont bien trop souvent la victime d’attaque tel que le brut-force.
Ici nous allons créer un nouvel utilisateur « user » avec le mot de passe « mot_de_passe ». Nous lui donnerons les droits sur la base « exemple » et aucune autre.
Pour cela, nous devons nous connecter à MySQL en root avec la commande suivante :

mysql -u root –p

Votre mot de passe « root » de MySQL va vous être demandé, mot de passe que vous avez renseigné à l’installation de MySQL sur la Raspberry Pi.
Maintenant que nous sommes connectés, nous allons créer la base « exemple » :

CREATE DATABASE exemple;

Nous allons utiliser l’ordre « GRANT » afin de définir les privilèges d’un utilisateur.
Ici, il pourra effectuer toutes les actions de son choix, depuis n’importe quel ordinateur, mais uniquement sur la base « exemple ».

GRANT ALL PRIVILEGES ON exemple.* TO user@'%' IDENTIFIED BY 'mot_de_passe';

Cette commande comporte de nombreuses informations que nous allons analyser. Notez qu’il n’est pas nécessaire d’avoir un utilisateur déjà créé, si celui donné n’existe pas, il sera créé automatiquement.
En français, cette commande se lis :
Donner tous les droits sur la base exemple et ses tables à l’utilisateur « user » pouvant se connecter depuis n’importe où, avec le mot de passe « mot_de_passe ».

Détaillions un peu cette commande :

  • « exemple.* » permet de stipuler que nous utilisons la base exemple, et « .* » signifie que cela s’applique à toutes les tables.
  • « user » signifie que l’attribution des privilèges va se faire pour l’utilisateur nommé « user »
  • @’%’ correspond à l’adresse IP du serveur distant auquel vous donnez les droits d’accès. Ici « % » équivaut à dire « toutes les adresses ». Une adresse précise peut être utilisée !

Une fois ceci fait, vous devez dire à MySQL de prendre en compte les changements effectués, avec l’ordre FLUSH :

flush privileges;

Vous pouvez maintenant quitter MySQL avec la commande « exit ».

Configurer MySQL pour accepter les connexions externes à la Raspberry Pi

Maintenant que les droits ont été donnés, nous allons devoir préciser à MySQL que nous souhaitons accepter des connexions externes à la Raspberry Pi.
Pour cela, nous allons éditer le fichier de configuration de MySQL situé dans le dossier « /etc/mysql » :

sudo nano /etc/mysql/my.cnf

Nous avons juste à commenter la ligne bind-address, pour commenter une ligne, ajoutez un ‘#’ au début de la ligne.

bind-address = 127.0.0.1

devient donc

#bind-address = 127.0.0.1

Par défaut, MySQL n’écoute que les connexions locales (127.0.0.1). Le fait de commenter cette ligne permet de supprimer cette sécurité et ainsi, récupérer les connexions externes !
Afin d’appliquer ces changements, redémarrez MySQL avec la ligne suivante :

/etc/init.d/mysql restart

 

Modifier le port de MySQL (facultatif)

Comme nous l’avons dit au début de l’article, les serveurs activant la connexion à distance à MySQL sont souvent victimes d’attaques.

Afin de réduire très fortement le nombre de ces attaques, nous vous conseillons de modifier le port de MySQL.
Par défaut, MySQL est configuré pour écouter sur le port 3306, choisissez un port libre, de notre coté nous avons choisi le port 8457, port non utilisé par d’autres logiciels ou protocoles majeurs.
Le changement se fait en modifiant le fichier « my.conf » situé dans le dossier « /etc/mysql ».

sudo nano /etc/mysql/my.cnf

Ce fichier contient deux parties, une partie destinée au client et l’autre à MySQL Server, c’est cette seconde partie qui nous intéresse.
Dans la partie suivant la ligne « [mysqld] » modifiez la ligne :

port = 3306

En la remplaçant par

port = 8457

Ici nous choisissons le port 8457, mais vous pouvez en choisir un autre, en faisant bien attention au fait qu’il ne soit pas utilisé par un autre programme/protocole.
Pour finir, redémarrez MySQL pour appliquer les changements :

sudo service mysql restart

Conclusion

N’oubliez pas d’ouvrir les ports TCP de votre box, afin de rediriger le flux vers votre Raspberry Pi. Vous pouvez visiter notre tutoriel mettre en ligne serveur web raspbian dydns port forwarding qui explique parfaitement comment procéder.
Si vous souhaitez monter un serveur de base de données efficace, choisissez une carte SD de qualité, et éventuellement un disque dur si votre but est de créer de très grosses bases. Vous trouverez des conseils sur notre article sur les accessoires.
Enfin, n’oubliez pas que vous pouvez installer d’autres services en plus de votre serveur MySQL, comme par exemple un media-center !

Cet article Activer la connexion à distance de MySQL sur votre Raspberry Pi est apparu en premier sur Raspbian-France.

Vus : 895
Publié par RaspbianFrance : 123