Autoriser l’accès à distance à une base de données MySQL

Autoriser l’accès à distance à MySQL MariaDB

De nombreux sites Web et applications commencent avec le serveur web et le moteur de base de données fonctionnant sur la même machine. Une configuration comme celle-ci, peut devenir compliquée et difficile à l’échelle au fil du temps. La solution est de séparer ces fonctions et d’établir une base de données distante. Permettre au serveur et à la base de données de croître indépendamment sur leurs machines respectives.

Pour activer cela, ouvrir votre fichier mysqld.cnf :

$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

ou

$ sudo nano /etc/mysql/my.cnf

ou

$ sudo nano /etc/my.cnf

Trouvez la ligne qui commence par la directive bind-address. Elle apparaîtra comme suit :

# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir                = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1
mysqlx-bind-address     = 127.0.0.1

Cette valeur est définie à 127.0.0.1 par défaut, ce qui signifie que le serveur ne cherchera que les connexions locales. Cette directive doit être modifiée pour faire référence à une adresse IP externe. Pour le dépannage, vous pouvez définir cette directive sur une adresse IP générique, telle que * , :  : , ou 0.0.0.0 :

# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir                = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0

Enregistrer et fermer le fichier après avoir modifié ce paramètre.

Redémarrez ensuite le service MySQL pour appliquer les modifications apportées à mysqld.cnf :

$ sudo systemctl restart mysql

Si vous avez déjà un compte utilisateur MySQL que vous avez l’intention d’utiliser pour vous connecter à la base de données à partir d’un hôte distant, vous devez reconfigurer ce compte pour vous connecter à partir du serveur distant plutôt que localhost. Ouvrez le client MySQL en tant qu’utilisateur principal de MySQL ou un autre compte utilisateur privilégié :

$ sudo mysql

si l’utilisateur root a un mot de passe, utilisez :

$ mysql -u root -p

Avec la commande suivante, nous pouvons créer un nouveau compte utilisateur qui se connectera uniquement depuis l’hôte distant :

mysql> CREATE USER 'bob'@'r_server_ip' IDENTIFIED BY 'password';

Ou Pour modifier l’hôte d’un utilisateur existant, vous pouvez utiliser MySQL RENAME USER commande. Exécutez la commande suivante :

mysql> RENAME USER 'bob'@'localhost' TO 'bob'@'r_server_ip';

Puis, pour vos besoins spécifiques, attribuez au nouvel utilisateur les droits pertinents. L’exemple suivant permet à un utilisateur de CRÉER, MODIFIER et SUPPRIMER des bases de données, des tables et des utilisateurs, ainsi que des données INSÉRER, METTRE À JOUR et SUPPRIMER de n’importe quelle table du serveur. Il permet également à l’utilisateur d’interroger des données à l’aide de SELECT, de construire des clés étrangères à l’aide du mot-clé REFERENCES et d’effectuer des opérations FLUSH en utilisant la permission RELOAD. Cependant, vous ne devez fournir aux personnes que l’accès dont elles ont besoin, alors n’hésitez pas à modifier les privilèges de votre propre utilisateur au besoin.

mysql> GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'bob'@'r_server_ip' WITH GRANT OPTION;

Après cela, c’est une bonne idée d’exécuter la commande FLUSH PRIVILEGES. Cela libérera toute mémoire mise en cache par le serveur à la suite des précédentes instructions CREATE USER et GRANT :

mysql> FLUSH PRIVILEGES;

Le client MySQL peut alors être fermé :

mysql> exit;

Enfin, si un pare-feu est installé sur votre serveur de base de données, vous devez ouvrir le port 3306 — le port par défaut de MySQL — pour permettre la communication avec MySQL.

Si vous ne souhaitez vous connecter au serveur de base de données qu’à partir d’une seule machine, utilisez la commande suivante pour autoriser cette machine à se connecter à distance. Remplacez r_server_ip par l’adresse IP réelle de l’ordinateur auquel vous souhaitez vous connecter :

UFW

$ sudo ufw allow from r_server_ip to any port 3306

Iptables

$ sudo iptables -A INPUT -p tcp -s r_server_ip --dport 3306 -j ACCEPT
$ sudo iptables-save

firewalld

$ sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp

toutefois, pour permettre à quiconque d’accéder à votre base de données MySQL en cours d’utilisation :

# UFW
$ sudo ufw allow 3306
# Iptaples
$ sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

Ensuite, essayez d’accéder à distance à votre base de données depuis une autre machine :

Note: Si vous avez configuré votre pare-feu pour accepter uniquement les connexions à partir d’une seule adresse IP, vous devez tenter d’accéder à la base de données en utilisant la machine associée à cette adresse.
$ mysql -u user -h db_server_ip -p

Si vous pouvez accéder à votre base de données, cela démontre que la directive bind-address dans votre fichier de configuration était la source du problème. Cependant, définir bind-address à 0.0.0.0 n’est pas sûr puisqu’il autorise les connexions à votre serveur depuis n’importe quelle adresse IP.

Laisser un commentaire