miércoles, 10 de diciembre de 2014

Permitir conexiones remotas en MySQL

A continuación voy a mostrar cómo configurar MySQL para poder acceder desde la red. Para este ejemplo vamos a usar Fedora 20 con KDE y LAMPP, para otras distribuciones o paquetes (como XAMPP) la ubicación de los archivos puede cambiar, pero la configuración es igual.

Lo primero es establecer una IP fija al computador que será el servidor, de otra manera sería complicado poder conectarse cada vez. Dentro de la configuración de red establecemos la IP y además debemos elegir la zona de firewall que vamos a utilizar, en este ejemplo vamos a usar la zona work.


Ahora debemos configurar el firewall para que acepte conexiones a través de http, https y mysql. Es importante que en la zona que dice Configuración esté establecido en permanente, de lo contrario podría perderse la configuración al cerrar.


También debemos especificar que acepte entrada por los puertos de internet y mysql.


Una vez configurado esto Linux ya tendrá conexión, el paso siguiente es decirle a MySQL que permita conexiones remotas y además crear un usuario con privilegios, ya que por defecto root solo posee conexión local por razones de seguridad.

Vamos a abrir el archivo /etc/my.cnf (en otras instalaciones puede estar en otra ubicación) y allí buscamos skip-networking, si no la encontramos vamos bien, de existir verificamos que esté comentada, sino, la comentamos o borramos.

En ese mismo archivo buscamos lo siguiente:
bind-address=*

De no existir lo agregamos o modificamos si existen. Este parámetro establece las IP permitidas, también se puede establecer una IP en lugar del * para agregar un poco de seguridad.

Ahora modificamos el archivo /etc/hosts.allow y agregamos lo siguiente:
mysqld: ALL

Para otros sistemas probablemente no sea mysql sino mysql, atentos a esto.

Ahora hay que crear el usuario para que se conecte a la base de datos, reiniciamos (o iniciamos) el servidor para que los cambios surtan efecto:

service mysqld restart

Ingresamos a MySQL, en este caso usando el usuario root:

mysql -u root -p

Ahora creamos el usuario:

GRANT SELECT, INSERT, UPDATE, DELETE ON mibasededatos.* TO 'miusuario'@'%' IDENTIFIED BY 'mipassword';

Con esto creamos un usuario (miusuario) que podrá acceder a la base de datos (mibasededatos) y tendrá una contraseña (mipassword). Si deseamos que tenga acceso a todas las bases de datos usamos el comodín *

GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'miusuario'@'%' IDENTIFIED BY 'mipassword'

El comodín % indica que pueda acceder desde cualquier IP. Podemos también agregar el mismo usuario usando el comodín *.

GRANT SELECT, INSERT, UPDATE, DELETE ON mibasededatos.* TO 'miusuario'@'*' IDENTIFIED BY 'mipassword';

Les recomiendo insertar los usuario con ambos comodines.

Si se desea más seguridad, se pueden remplazar el * y el % por la IP desde la que se va a conectar.

GRANT SELECT, INSERT, UPDATE, DELETE ON mibasededatos.* TO 'miusuario'@'192.168.0.5' IDENTIFIED BY 'mipassword';

Ahora hay que actualizar la tabla de registros para que se cargue el usuario con los permisos.

FLUSH PRIVILEGES;

Podemos verificar que existan los permiso, para ello ingresamos a la base de datos de mysql y mostramos los datos de los usuario:

use mysql;
select Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv from user;

También podemos usar herramientas como phpmyadmin para verificar los privilegios.

Con estos pasos que parecen bastantes pero a la larga son sencillos estará configurado MySQL para permitir conexiones remotas.

0 comentarios:

Publicar un comentario