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

93

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?

skystar7
fuente

Respuestas:

100

EDITAR: Considere mirar y votar a favor la respuesta de Malvineous 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, se user_name@'%.example.com'aplica a user_namepara cualquier host del example.comdominio y se user_name@'192.168.1.%'aplica a user_namepara cualquier host de la 192.168.1subred de clase C.

p0lar_bear
fuente
6
Acabo de hacerlo así, pero, digamos, ¿qué hace que no se aplique a: user_name@'192.168.1.my-hacked-rnds.killing.mysql.com '???? Ahora seguiré adelante, 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 complementa 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.
Josiah
22
Ejemplos como '192.168.1.my-hacked-rnds.killing.mysql.com' 'se tratan específicamente en dev.mysql.com/doc/refman/5.5/en/account-names.html : Para frustrar tales intentos, MySQL no permite la coincidencia de nombres de host que comienzan con dígitos y un punto. ... Un valor de comodín de IP solo puede coincidir con direcciones IP, no con nombres de host.
Stefan Lasiewski
118

Eso parece que también se puede utilizar una máscara de red , por ejemplo,

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...
Malvino
fuente
7
Esta debería ser la respuesta aceptada ya que es la única técnica correcta. Apoyado desde al menos 5,5: dev.mysql.com/doc/refman/5.5/en/account-names.html
lifeofguenter
6
No intente utilizar 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 debe 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.0es el mismo 192.168.0.34/24que realmente no tiene sentido ( /24significa 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?
Malvineous
@Malvineous Ese era mi punto. Si usa 192.160.0.34/255.255.255.0, mysql no permite 192.160.0.34. Quería permitir full / 24 (sí, usé la 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
28

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

GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';
Mike Brant
fuente
12
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 "*"

David Allen
fuente
5

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

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 otro 'user'@'192.168.0.%'con contraseña2,

entonces,

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

resultará en un error de 'Acceso denegado' porque la 'user'@'192.168.0.102'autenticación de IP única se usa sobre la 'user'@'192.168.0.%'autenticación de comodín .

site80443
fuente
2
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 comentario.
Kmeixner
13
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
0

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. escriba # antes de bind-address = 127.0.0.1 en la carpeta my.cnf
  6. # bind-address = 127.0.0.1
  7. guardar la carpeta my.cnf con control + X
  8. escribir service mysql restart
  9. puede conectarse a través de navicat en su host
Murat Delen
fuente
0

Motivado por la respuesta de @Malvineaus, lo probé yo mismo y noté que no funcionó para mí.

Puede especificar máscaras de subred con '192.168.1.%' O '192.168.1.0/255.255.255.0' pero la subred debe estar siempre en octetos completos. consulte 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 se encuentra en un límite de octeto completo.

Patric
fuente