El otro dia me tope con un problema al montar un MySQL en el Ubuntu Server y querer acceder desde el workbench de mi portatil para crear tablas y demás. El problema es que por defecto MySQL solo te deja hacer conexiones desde localhost.

Por eso podemos por terminal hacer un

mysql -u root -p

y logearnos como root y realizar cambios. Sin embargo si queremos logearnos en remoto, casi que no nos deja.

Esto sucede por dos principales razones:

  1. el usuario root esta configurado como ‘root’@’localhost’, lo que quiere decir que solo se puede loguear desde el localhost. Esto no esta mal hecho ni mucho menos. De hecho yo lo dejaría tal cual, y no lo usaría nunca nada más que para crear otros usuarios y darles permisos.
  2. MySQL por defecto solo escucha conexiones desde localhost (127.0.0.1). Hay que configurarlo para que escuche otras IPs.

Empezaremos configurando MySQL para que escuche conexiones desde otras IPs. Para ello nos vamos a ir a /etc/mysq:

cd /etc/mysql

Ahora, y esto es solo una buena practica, se hace un backup del fichero tal cual esta. Por si la cagas al tocar poder restaurarlo. Así que hacemos un:

cp my.cnf my.cnf.backup

Ya tenemos un fichero para por si la liamos parda. Lo podeis llamar como os salga. Yo le pongo el .backup al final siempre para no liarme. Despues ya editamos el fichero my.cnf :

pico my.cnf

O lo abris con nano, vi, vim o el editor que os gusten más los colorines y demás.

Buscamos la variable bind-addres (yo como uso pico, presionas ctrl+w, escribes la expresión que estas buscando y le das a enter), que saldrá así:

Como se ve el bind-addres a priori

Como se encuentra la variable bind-address a priori

Lo que tenemos que hacer es cambiar el bind-address. Para ello, en vez de decirle que escuche en 127.0.0.1, vamos a poner en su lugar 0.0.0.0

Esto hará que acepte conexiones a las BBDD en el puerto predeterminado de mysql (que por si alguien no lo sabe es el 3306, se ve también en la imagen superior). Este puerto también se puede cambiar por cuestiones de seguridad y tal, ya que si alguien te hace un escaneo de puertos a tu server y ve que esta abierto en el 3306, va a saber que es un mysql. Pero bueno ahora no vamos a eso.

Una vez cambiado, salimos del editor y reseteamos el servicio para que coja la nueva configuracion (presupongo que tienes unstalado mysql como servicio del sistema). Si instalaste mysql como root debes, de nuevo, lanzarlo con sudo.

service mysql restart

Te saldra lo siguiente:

restart

Servicio mysql del sistema reseteado

 

Ahora por si acaso vamos a comprobar que efectivamente esta escuchando conexiones tcp haciendo por terminal:

sudo netstat -ltnp | grep mysql

Saldrá:

Demonio MySQL escuchando conexiones

Demonio MySQL escuchando conexiones

Y direis, pero esto es una cagada, ahora cualquier tontaco del 3 al 4º se puede conectar a nuestra BD. Pero no, porque en primer lugar y como ya he dicho, root esta preconfigurado en localhost (aparte deberían conocer la clave). Es decir, desde fuera no te puedes conectar con un cliente MySQL como root. Y entonces para que me sirve que escuche IPs externas si no me puedo conectar? Pues porque ahora vamos a crear un usuario que se pueda conectar desde nuestra IP.

Crear usuario en MySQL

En primer lugar entramos en nuestra terminal de MySQL haciendo:

mysql -u root -p

y una vez dentro hacemos:

CREATE USER 'nombre_usuario'@'ip_usuario' IDENTIFIED BY 'clave_usuario';

Ahora, un consejo, si es un usuario para alguna aplicación que va a estar siempre en el mismo server (ojo físico, que si esta en la nube al bajar y levantar las VMs cambiará la IP) podemos poner una IP fija y a tirar. En cuanto a seguridad es la mejor opción. Sin embargo como en este caso quiero conectarme desde mi portatil, el cual dependiendo de la red cambiará su IP, hacemos:

CREATE USER 'workbench'@'0.0.0.0' IDENTIFIED BY 'miaumiaumiaumiau';

Ahora vamos a dar permisos al usuario:

GRANT permiso ON db.tabla TO 'usuario'@'ip_usuario';

Yo por ejemplo como solo quiero inspeccionar las tablas y si acaso traerme los datos a mi app para alguna prueba hago:

GRANT SELECT ON miDB TO 'workbench'@'0.0.0.0';

Pero se le pueden dar distintos permisos dependiendo de lo que queramos hacer: ALL PRIVILEGES, CREATE, DROP, DELETE, INSERT, SELECT, UPDATE, GRANT OPTION.

Finalmente hay que confirmar los permisos dados (como un commit) mediante un:

FLUSH PRIVILEGES;

PD: Si nos estamos conectando en distintos dominios de red, o subdominios, y hay proxy (que lo habrá) saltate el paso1 de cambiar el bind-addres, y en el paso 2 crea el usuario con ‘localhost’ como IP. Esto es porque el proxy, a no ser de que esté preconfigurado (pregunta a tu adminstrador de red) te va a capar las conexiones en el puerto 3306. SOlución: hacte un tunel de red con PUTTY, MobaXTerm o el programa que te de la gana. Al hacer un tunel realmente te estas conectando desde localhost a MySQL.

Fuentes:

https://www.digitalocean.com/community/tutorials/crear-un-nuevo-usuario-y-otorgarle-permisos-en-mysql-es

Categorías: Sin categoría

Entradas relacionadas

Sin categoría

Proxy en OpenSUSE

Ultimamente comienzo mis andanzas por Suse, un poco coñazo porque estoy hecho a Debian y derivadas (Ubuntu y cia.), y alguna vez he usado CentOS y familia y poco mas. Y cual es el problema Leer más…

Sin categoría

Abrir puertos en una máquina virtual de Azure

Con el cambio del portal clásico al nuevo portal de Azure, aveces puede resultar difícil hacer algo tan básico como abrir los puertos de una máquina virtual. Y ya que la documentación de Microsoft es Leer más…

Sin categoría

Proyecto MuSync – Alternativa Spotify

MuSync es un proyecto que nace con el objetivo personal de reemplazar Spotify en mis dispositivos. Actualmente tengo una enorme dependencia del servicio freemium de Spotify y ya no hago acopio en formato mp3 de las Leer más…

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies