Mi Blog
Cómo configurar MySQL o MariaDB para acceder de forma remota

Cómo configurar MySQL o MariaDB para acceder de forma remota

(4 votos)

Acceder de forma remota a un SGBD MySQL/MariaDB con la configuración inicial no es posible. Por seguridad, solamente las conexiones desde localhost son posibles. Con unos pequeños cambios en la configuración, podremos cambiar este comportamiento.

Seguid leyendo y os enseñaré a configurar MySQL/MariaDB para poder conectar de forma remota...

⬇️ Compra en Amazon el hardware que utilizo ⬇️

🔥 ¡DESCÚBRELOS! 🔥

 

 

¿QUÉ SIGNIFICA ACCEDER DE FORMA REMOTA?

Los SGBD -generalmente- son accesibles tanto desde localhost como desde otros equipos remotos, aplicando una serie de políticas de seguridad y configuraciones que permitan el acceso correcto a usuarios, desde uno o varios equipos remotos y a una o varias bases de datos. Acceder de forma remota significa acceder a un SGBD que no está alojado en tu propio equipo.

 

 

MySQL/MariaDB permiten conceder/denegar el acceso a conexiones remotas

 

 

1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL

  • Un PC con cualquier Sistema Operativo (preferiblemente GNU/linux)
  • Servidor MySQL/MariaDB y acceso de administrador al SGBD de MySQL/MariaDB

 

 

2.- ACEPTAR CONEXIONES REMOTAS

Por defecto, el fichero principal de configuración es /etc/mysql/my.conf, pero es posible que cambie en función de la distribución de GNU/Linux que estemos usando. Si estamos usando Windows con Xammp, wamp, appserv... deberemos buscar el fichero dentro del directorio de MySQL. En GNU/Linux podemos buscar el fichero con el siguiente comando:

raul@debian:/$ sudo egrep -r -i "bind-address|\[mysqld\]" /etc/mysql/
/etc/mysql/mariadb.conf.d/50-server.cnf:[mysqld]
/etc/mysql/mariadb.conf.d/50-server.cnf:bind-address = 127.0.0.1

 

 

Una vez encontrado el fichero de configuración, en este ejemplo /etc/mysql/50-server.cnf, editaremos el fichero y buscaremos la línea bind-address = 127.0.0.1 dentro de la sección [mysqld] y la comentaremos añadiendo # delante quedando de la siguiente forma:

#bind-address = 127.0.0.1

 

 

Una vez hechos los cambios, reiniciaremos el servidor de MySQL/MariaDB, existen varias formas, probad la que os funcione:

raul@debian:~$ sudo /etc/init.d/mysql restart
raul@debian:~$ sudo service mysql restart
raul@debian:~$ sudo systemctl restart mariadb
raul@debian:~$ sudo systemctl restart mysql

 

 

3.- CREAR USUARIO DE ACCESO REMOTO

Ahora, en este ejemplo vamos a crear un usuario remoto llamado remotoRO que podrá acceder a una base de datos llamada testing pero solamente con permisos de lectura, y un usuario local llamado  remotoRW con todos los permisos sobre esa base de datos. De esta forma, nos garantizamos que las conexiones desde el exterior, en caso de acceder, solo tengan permisos de lectura.

Primero conectaremos con un usuario administrador al SGBD:

raul@debian:~$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 37
Server version: 10.3.27-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

 

 

Ahora añadiremos el usuario local remotoRW y el usuario remotoRO:

MariaDB [(none)]> CREATE USER 'remotoRW'@'localhost' IDENTIFIED BY 'remoteRW';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> CREATE USER 'remotoRO'@'%' IDENTIFIED BY 'remoteRO';
Query OK, 0 rows affected (0.001 sec)

 

 

Una vez creados los usuarios, debemos otorgarles los privilegios sobre la base de datos llamada testing. Si queremos comprobar que privilegios tienen ahora mismo esos usuarios ejecutaremos el siguiente comando para cada uno de ellos. Podemos ver que no tienen ningún privilegio en el SGBD:

MariaDB [(none)]> SHOW GRANTS FOR `remotoRW`@`localhost`;
ERROR 1141 (42000): There is no such grant defined for user 'remoteRW' on host 'localhost'
MariaDB [(none)]> SHOW GRANTS FOR `remotoRO`@`%`;
ERROR 1141 (42000): There is no such grant defined for user 'remoteRO' on host '%'

 

 

Añadiremos los permisos de acceso total al usuario local (remotoRW) en locahost y de solo lectura al usuario (remotoRO) desde cualquier host %:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON testing.* TO 'remotoRW'@'localhost' IDENTIFIED BY 'remotoRW';
Query OK, 0 rows affected (0.000 sec)

 

 

MariaDB [(none)]> GRANT SELECT ON testing.* TO 'remotoRO'@'%' IDENTIFIED BY 'remotoRO';
Query OK, 0 rows affected (0.000 sec)

 

 

Revisamos los privilegios de ambos usuarios:

MariaDB [(none)]> SHOW GRANTS FOR `remotoRW`@`localhost`;
+-----------------------------------------------------------------------------------------------------------------+
| Grants for remotoRW@localhost |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `remotoRW`@`localhost` IDENTIFIED BY PASSWORD '*2DC0A19CBAF65E6CFBB8C2EAD1DE7C0B5897F86C' |
| GRANT ALL PRIVILEGES ON `testing`.* TO `remotoRW`@`localhost` |
+-----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)

 

 

MariaDB [(none)]> SHOW GRANTS FOR `remotoRO`@`%`;
+---------------------------------------------------------------------------------------------------------+
| Grants for remotoRO@% |
+---------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `remotoRO`@`%` IDENTIFIED BY PASSWORD '*B174665A56716E7A88C2650B6E3AD9D8F942A5CA' |
| GRANT SELECT ON `testing`.* TO `remotoRO`@`%` |
+---------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)

 

 

Ahora no siempre es necesario, ejecutaremos el siguiente comando para que los privilegios aplliquen:

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

4.- PROBAR EL ACCESO REMOTO

Ahora, es momento de probar los dos usuarios. Primero vamos a probar con el usuario remotoRW desde local y desde un equipo remoto y vamos a probar si podemos insertar datos en la base de datos. Primero conectaremos desde local, con el usuario remotoRW y a la base de datos testing:

raul@debian:~$ mysql -u remotoRW testing -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 193
Server version: 10.3.27-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [testing]>

 

 

Probamos a hacer un INSERT y un SELECT y vemos que funciona correctamente, por tanto, el usuario está configurado tal y como queríamos:

MariaDB [testing]> INSERT INTO alumnos (nombre,edad) VALUES ("nombre1",15);
Query OK, 1 row affected (0.010 sec)

MariaDB [testing]> select * FROM alumnos;
+---------+------+
| nombre | edad |
+---------+------+
| nombre1 | 15 |
+---------+------+
1 row in set (0.001 sec)

 

 

Ahora, con el usuario remotoRW desde otro equipo remoto y vemos que efectivamente no nos deja conectar, por tanto, el comportamiento es correcto:

raul@redhat:~$ mysql -h 192.168.1.47 -u remotoRW testing -p
Enter password:
ERROR 1045 (28000): Access denied for user 'remotoRW'@'redhat.home' (using password: YES)

 

 

Ahora probamos desde local, a conectar con el usuario remotoRO y vemos que deja conectar, por tanto el comportamiento es correcto:

raul@debian:~$ mysql -u remotoRO testing -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 227
Server version: 10.3.27-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

 

Si probamos con el usuario remotoRO a conectar desde otro equipo remoto, vemos que funciona correctamente, pero no nos dejará hacer INSERT, solo SELECT:

raul@debian:~$ mysql -h 192.168.1.47 -u remotoRO testing -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 195
Server version: 10.3.27-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [testing]>

 

 

Probamos a hacer INSERT y da error, por tanto es correcto:

MariaDB [testing]> INSERT INTO alumnos (nombre,edad) VALUES ("nombre2",25);
ERROR 1142 (42000): INSERT command denied to user 'remotoRO'@'redhat.home' for table 'alumnos'

 

 

Pero tal y como espeficicamos en los privilegios, si que podremos hacer SELECT:

MariaDB [testing]> select * FROM alumnos;
+---------+------+
| nombre | edad |
+---------+------+
| nombre1 | 15 |
+---------+------+
1 row in set (0.000 sec)

 

 

ENJOY!


Acerca de Mi

RPF

Soy Ingeniero Téc. Industrial Mecánico, Administrador de Sistemas Informáticos, Desarrollador de Aplicaciones Informaticas Web, Técnico Superior en PRL, Experto en Energías Renovables... y trabajo actualmente como Senior DevOPS en HP SCDS.

Contactar conmigo

Dirección: León, España

E-Mail: Contactar

Web: https://www.raulprietofernandez.net

Skype: raul.lnx

APÚNTATE GRATIS

VIP RPF
Entra en la Comunidad VIP y consigue acceso a las descargas en PDF, Trucos y Videotutoriales ocultos y mucho más... ¡Muy Pronto!