acess_mysql-bg

Accéder à une base de données MySQL depuis l'extérieur

Par défaut MySQL est sécurisée, en effet cette dernière ne permet pas la connexion distante, le serveur écoutant uniquement en local, il vous est impossible de vous connecter depuis un autre serveur sur cette base de données pourtant accessible localement. C'est pourquoi il vous faut établir et créer un accès extérieur afin de palier ce manque.

1. Modification du bind-adress :

La première étape consiste en la modification du fichier /etc/mysql/my.cnf afin d'éditer le bind-adress :

fichier /etc/mysql/my.cnf
bind-address = 127.0.0.1
#est à modifié par :
#bind-address = 127.0.0.1

Il faut ensuite redémarrer MySQL afin de prendre en compte vos modifications.

2. Création de l'accès :

Il existe deux méthodes que je vais détailler, mais je ne peux que conseiller la seconde.

a. Première méthode, peu sécurisée :

Il existe une première méthode qui est peu sécurisée, elle consiste en la création d'un utilisateur, ici utilisateur, qui aurait accès à la base de données depuis n'importe quelle adresse ip, cependant je déconseille cette première solution, si le serveur depuis lequel vous-vous connectez dispose d'une adresse fixe. Il est préférable de se reporter à la seconde solution.

Connectez vous à votre base de données via ligne de commande : mysql -u root -p

Dans l'exemple si dessous, l'utilisateur est "utilisateur", le mot de passe est "mot_de_passe", et la base de données créée spécialement pour l'occasion (un peu de sécurité tout de même dans l'insécurité) est "nom_database".

Attention, dans la commande ci-dessous, il s'agit bien du caractère ` (accent grave) non ' (apostrophe) ou " (guillemets).

Commandes SQL
CREATE USER `utilisateur`@`%` IDENTIFIED BY `mot_de_passe`;
GRANT USAGE ON * . * TO `utilisateur`@`%` IDENTIFIED BY `mot_de_passe` WITH MAX_QUERIES_PER_HOUR 0
MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `nom_database`;
GRANT ALL PRIVILEGES ON `nom_database` . * TO `utilisateur`@`%`;

Si vous utilisez iptables il faut ajouter une règle en conséquence, qui acceptera n'importe quelle connexion, sans restriction d'ip, vers le port de MySQL (3306) :
iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT.

b. Seconde méthode, plus sécurisée :

Dans ce second exemple l'accès crée sera plus sécurisé, en effet il est conteneurisé à une seule adresse ip, ainsi même si votre accès tombe entre de mauvaises mains, celui-ci n'étant pas utilisé depuis l'adresse autorisée il ne pourra pas en faire mauvais usage. Il est donc préférable de mettre en place cette solution.

Dans l'exemple si dessous, l'utilisateur est "utilisateur", le mot de passe est "mot_de_passe", et la base de données créée spécialement pour l'occasion est "database_utilisateur", l'adresse qui sera à l'origine de la connexion est "012.34.567.89".

Connectez vous à votre base de données via ligne de commande : mysql -u root -p

Commandes SQL
CREATE USER `utilisateur`@`012.34.567.89` IDENTIFIED BY `mot_de_passe`;
GRANT USAGE ON * . * TO `utilisateur`@`012.34.567.89` IDENTIFIED BY `mot_de_passe` WITH MAX_QUERIES_PER_HOUR
0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE DATABASE IF NOT EXISTS `database_utilisateur`;
GRANT ALL PRIVILEGES ON `database_utilisateur` . * TO `utilisateur`@`012.34.567.89`;

Attention, dans la commande ci-dessus, il s'agit bien du caractère ` (accent grave) non ' (apostrophe) ou " (guillemets).

Maintenant ajoutez une règle en conséquence, qui sera restreinte à l'adresse ip préalablement indiquée, sur le seul port de mysql :
iptables -A INPUT -i eth0 -s 012.34.567.89 -p tcp --destination-port 3306 -j ACCEPT.

3. Informations complémentaires :

Pour augmenter la sécurité de votre base de données ainsi accessible depuis l'extérieur et éviter les brute-force bêtes et méchants il est conseillé de changer le port de MySQL, pour ce faire éditer le fichier /etc/mysql/my.cnf il s'agit de modifier le port de [mysqld] et non [client] :

Fichier : /etc/mysql/my.cnf
(...)

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

(...)

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306 #changez par 1234 par exemple
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking

(...)

À noter que si vous avez changé le port il faut en conséquence changer votre règle iptables.

Poster un Commentaire

Me notifier des
avatar
300
Angristan
Invité

Super j'en avais besoin 🙂

wpDiscuz