¿Cómo otorgar acceso remoto a MySQL para una subred completa?

Puedo otorgar acceso fácilmente a una IP usando este código:

$ mysql -u root -p
Enter password:    
mysql> use mysql    
mysql> GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';     
mysql> FLUSH PRIVILEGES;

Pero necesito permitir que toda la subred 192.168.1.* acceda a la base de datos de forma remota.

¿Cómo puedo hacer eso?

preguntado el 31 de julio de 12 a las 15:07

8 Respuestas

It parece que también puedes usar una máscara de red, p.ej

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...

Respondido 15 Jul 16, 08:07

Esta debería ser la respuesta aceptada, ya que es la única técnicamente correcta. Compatible desde al menos 5.5: dev.mysql.com/doc/refman/5.5/en/nombres-de-cuenta.html - vidadeguente

No intente usar la notación CIDR como "172.16.0.0/16", esto no funciona. Utilice siempre la máscara de red completa. - Oliver R.

Parece que tiene que usar la primera dirección IP del rango; Usar, por ejemplo, 192.168.0.34/255.255.255.0 fallará. - Sander

@SanderBackus: 192.160.0.34/255.255.255.0 es el mismo que 192.168.0.34/24 lo que realmente no tiene sentido (/24 significa que el último número puede ser de 0 a 255, ignorando su valor de 34). ¿Funciona si usa una máscara válida para la IP, como 192.168.0.34/255.255.255.252? - Malvino

@Malvineous Ese era mi punto. Si usa 192.160.0.34/255.255.255.0 mysql no permite 192.160.0.34. Tenía la intención de permitir /24 completo (sí, usé máscara de red completa, como se documenta), pero aparentemente si tiene que usar 192.160.0.0/255.255.255.0 para permitir el rango completo. - Sander

EDITAR: Considere mirar y votar MalvinoLa respuesta de en esta página. Las máscaras de red son una solución mucho más elegante.


Simplemente use un signo de porcentaje como comodín en la dirección IP.

De http://dev.mysql.com/doc/refman/5.1/en/grant.html

Puede especificar comodines en el nombre de host. Por ejemplo, user_name@'%.example.com' se aplica a user_name para cualquier host en el example.com dominio y user_name@'192.168.1.%' se aplica a user_name para cualquier host en el 192.168.1 subred clase C.

respondido 14 nov., 17:20

Acabo de hacerlo así, pero digamos, ¿qué hace que no se aplique a: nombre_de_usuario@'192.168.1.my-hacked-rnds.killing.mysql.com'???? Ahora continuaré, ya que se trata de MySQL, siento que no quiero saber la respuesta. - florian heigl

+Florian, me imagino que es mejor que simplemente usar '%' ya que agrega una capa de seguridad que debe superarse, pero creo que tienes un buen punto sobre su debilidad. Ciertamente complemento esta configuración por otros medios, como bloquear el servidor de la base de datos en una subred separada a la que puedo controlar el acceso a través de un firewall para negar sus preocupaciones, entre otras cosas. - Josías

Ejemplos como '192.168.1.my-hacked-rnds.killing.mysql.com'' se abordan específicamente en dev.mysql.com/doc/refman/5.5/en/nombres-de-cuenta.html : Para frustrar tales intentos, MySQL no permite la coincidencia de nombres de host que comienzan con dígitos y un punto. ... Un valor comodín de IP solo puede coincidir con direcciones IP, no con nombres de host. - Stefan Lasiewski

Simplemente usaría '%' como su comodín de esta manera:

GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';

Respondido 31 Jul 12, 16:07

mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';  

El carácter comodín es un "%" en lugar de un "*"

Respondido 31 Jul 12, 16:07

Solo una nota de una peculiaridad que enfrenté:
Considerar:

db server:  192.168.0.101
web server: 192.168.0.102

Si tiene un usuario definido en mysql.user como 'user'@'192.168.0.102' con contraseña1 y otra 'user'@'192.168.0.%' con contraseña2,

entonces,

si intenta conectarse al servidor db desde el servidor web como 'usuario' con contraseña2,

dará como resultado un error de 'Acceso denegado' porque la IP única 'user'@'192.168.0.102' la autenticación se utiliza sobre el comodín 'user'@'192.168.0.%' autenticación.

Respondido el 02 de junio de 16 a las 13:06

No estoy seguro de que esta sea una respuesta a la pregunta. Si no proporciona una respuesta directa a la pregunta original, debe publicarse como un comentario. - Kmeixner

Kmeixner, esperas que escriba tanto en un comentario? Aplica un poco de sentido común y deja de ser un robot. Esta comunidad es para ayudar a los desarrolladores a no complicarles la vida. - user1735921

Gracias por este valioso consejo. - diezG

después de conectar el servidor y desea conectarse en su host, debe seguir los pasos a continuación:

  1. escribir mysql para abrir mysql
  2. escribir GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect';
  3. presione control y X para salir de mysql
  4. escribir nano /etc/mysql/my.cnf
  5. escribe # antes bind-address = 127.0.0.1 en la carpeta mi.cnf
  6. #bind-dirección = 127.0.0.1
  7. guarde la carpeta my.cnf con control + X
  8. escribir service mysql restart
  9. podría conectarse a través de navicat en su host

Respondido el 09 de enero de 20 a las 12:01

Motivado por la respuesta de @Malvineaus, lo probé yo mismo y noté que no me funcionaba.

Puede especificar máscaras de subred con '192.168.1.%' o '192.168.1.0/255.255.255.0' pero la subred siempre debe estar en octetos completos. ver https://mariadb.com/kb/en/create-user/#host-name-component. Como resultado, la funcionalidad entre una forma de especificación y la otra es la misma.

Por ejemplo, '192.168.1.0/255.255.255.128' no funcionará porque no está en un límite de octeto completo.

Respondido el 15 de Septiembre de 20 a las 11:09

MySQL 8.0.23 en adelante ahora también admite la notación CIDR.

Así que básicamente:

-- CIDR Notation
GRANT ... TO 'user'@'192.168.1.0/24' IDENTIFIED BY ...

-- Netmask Notation
GRANT ... TO 'user'@'192.168.1.0/255.255.255.0' IDENTIFIED BY ...

Respondido 18 Feb 21, 07:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.