conceder acceso remoto a la base de datos MySQL desde cualquier dirección IP


282

Soy consciente de este comando:

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

Pero luego solo me permite otorgar una dirección IP particular para acceder a esta base de datos remota de MySQL. ¿Qué sucede si lo deseo para que cualquier host remoto pueda acceder a esta base de datos MySQL? ¿Cómo puedo hacer eso? Básicamente, estoy haciendo pública esta base de datos para que todos puedan acceder a ella.


1
Antes de hacer esto, considere las implicaciones de seguridad
e18r el

77
No todo sistema es un sistema de producción. Algunas personas necesitan esto para el desarrollo.
Conrad Jones el

Respuestas:


274
TO 'user'@'%'

% es un comodín: también puede hacer '%.domain.com'o '%.123.123.123'cosas así si lo necesita.


@kristopolous Hay muchas cosas que podrían causar eso. Este comando trata sobre el acceso remoto (dos máquinas diferentes). Si eso no es lo que está haciendo, este no es el comando correcto. Aún necesita una contraseña correcta y otras cosas.
Ariel

11
Debe usar "privilegios de descarga"; para que los cambios surtan efecto
Didier Sampaolo

El truco cuando se conecta a una instancia de db que se ejecuta en la misma instancia del sistema operativo (por ejemplo, su máquina de desarrollo), es pasar el -h my_machine_nameparámetro. Esto engaña al cliente para que te identifique como 'user'@my_machine_name.example.com, en lugar de 'user'@localhost. De esta manera, no necesita crear y mantener cuentas duales y concesiones para ambos localhosty acceso a la red. Y, por supuesto, estar seguro mysqldestá obligado a 0.0.0.0frente 127.0.0.1.
Charlie Reitzel

173

Habilitar acceso remoto (Grant) Inicio / Tutoriales / Mysql / Habilitar acceso remoto (Grant) Si intenta conectarse a su servidor mysql desde una máquina remota y se encuentra con un error como el siguiente, este artículo es para usted.

ERROR 1130 (HY000): el host '1.2.3.4' no puede conectarse a este servidor MySQL

Cambiar la configuración de mysql

Comience con la edición del archivo de configuración mysql

vim /etc/mysql/my.cnf

Comente las siguientes líneas.

#bind-address           = 127.0.0.1
#skip-networking

Si no encuentra la línea de salto de red, agréguela y coméntela.

Reinicie el servidor mysql.

~ /etc/init.d/mysql restart

Cambiar privilegio GRANT

Es posible que se sorprenda al ver incluso después del cambio anterior que no obtiene acceso remoto o acceso pero no puede acceder a todas las bases de datos.

De manera predeterminada, el nombre de usuario y la contraseña de mysql que está utilizando puede acceder a mysql-server localmente. Entonces necesita actualizar el privilegio.

Ejecute un comando como el siguiente para acceder desde todas las máquinas. (Reemplace USERNAMEy PASSWORDpor sus credenciales).

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Ejecute un comando como el siguiente para dar acceso desde una IP específica. (Reemplace USERNAMEy PASSWORDpor sus credenciales).

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Puede reemplazar 1.2.3.4 con su IP. Puede ejecutar el comando anterior muchas veces para OTORGAR acceso desde múltiples IP.

También puede especificar un acceso remoto USERNAMEy separado PASSWORD.

Puede verificar el resultado final de la siguiente manera:

SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";

Finalmente, también puede necesitar ejecutar:

mysql> FLUSH PRIVILEGES;

Conexión de prueba

Desde terminal / línea de comando:

mysql -h HOST -u USERNAME -pPASSWORD

Si obtiene un shell mysql, no olvide ejecutar show database; para verificar si tiene privilegios correctos de máquinas remotas.

Consejo adicional: revocar acceso

Si accidentalmente concede acceso a un usuario, es mejor tener a mano la opción de revocación.

A continuación se revocarán todas las opciones para USERNAME de todas las máquinas:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.

Si ve el privilegio USAGE después de ejecutar el comando REVOKE, está bien. Es tan bueno como ningún privilegio en absoluto. No estoy seguro de si se puede revocar.


77
Tenga en cuenta que tuve que cambiar el /etc/mysql/mysql.conf.d/mysqld.cnfarchivo en lugar de /etc/mysql/my.cnfcomentar la bind-addressparte. La #skip-networkinglínea de falta y no debe haber ningún efecto de la adición y comentando la línea.
Pawan

1
En MariaDB 10.1.26, el archivo de configuración es/etc/mysql/mariadb.conf.d/50-server.cnf
Kwadz

Si ha hecho todo lo anterior y aún no puede conectarse, verifique la configuración de su firewall, podría estar bloqueando el puerto 3306o el puerto que haya configurado
partir del

37

Suponiendo que el paso anterior se haya completado y que el puerto MySql 3306 se pueda acceder de forma remota; No olvide vincular la dirección IP pública en el archivo de configuración mysql.

Por ejemplo en mi servidor ubuntu:

#nano /etc/mysql/my.cnf

En el archivo, busque el bloque de sección [mysqld] y agregue la nueva dirección de enlace, en este ejemplo es 192.168.0.116. Se vería así

......    
.....    
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.

bind-address        = 127.0.0.1    
bind-address        = 192.168.0.116

.....    
......

puede eliminar el enlace localhost (127.0.0.1) si lo desea, pero luego debe proporcionar específicamente una dirección IP para acceder al servidor en la máquina local.

Luego, el último paso es reiniciar el servidor MySql (en ubuntu)

stop mysql

start mysql

o #/etc/init.d/mysql restartpara otros sistemas

Ahora se puede acceder a la base de datos MySQL de forma remota mediante:

mysql -u username -h 192.168.0.116 -p

/etc/init.d/mysql reloaddebería ser suficiente
Lorenz Lo Sauer

Acabo de hacer esto y no pude conectarme al servidor mysql de forma remota. Luego intenté comentar las direcciones de enlace y funcionó. También intenté iniciar sesión en el servidor con mysql -u <usuario> -p sin especificar el host y funcionó, por lo que parece que "puedes eliminar el enlace localhost (127.0.0.1) si lo deseas, pero luego tienes que hacerlo específicamente dar una dirección IP para acceder al servidor en la máquina local ". no es correcto. (ubuntu 12.04 servidor LTS mysql Ver 14.14 Distrib 5.5.34)
Programador

55
La bind-addressdirectiva determina la dirección IP en la que escucha el servidor mysql ; no las direcciones IP desde las cuales el servidor acepta conexiones.
GoZoner

1
Después de seguir cada paso, no funciona. Recibo un error al comentar bind-addressla dirección localhost o la de host remota. mysql.serviceJob for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
baermathias

¿Es posible proporcionar una dirección como abc.abc:1234 en lugar de 192.168.0.116?
bielas

26

Para cualquiera que haya intentado esto, así es como obtuve los privilegios, espero que ayude a alguien

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';

Como se señaló, %es un comodín y esto permitirá que cualquier dirección IP se conecte a su base de datos. La suposición que hago aquí es que cuando te conectas tendrás un usuario llamado root(que es el predeterminado). Introduce la contraseña de root y listo. Tenga en cuenta que no tengo comillas simples ( ') alrededor de la raíz del usuario.


¿Por qué es importante eliminar las comillas simples del usuario? ¿Por qué difiere esto de otras respuestas (y el manual)?
DMCoding

26

Se requieren cambios en el archivo de configuración para habilitar las conexiones a través de localhost.

Para conectarse a través de IP remotas, inicie sesión como usuario "root" y ejecute las siguientes consultas en mysql.

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Esto creará un nuevo usuario al que se puede acceder en localhost, así como desde IP remotas.

También comente la siguiente línea de su archivo my.cnf ubicado en /etc/mysql/my.cnf

bind-address = 127.0.0.1

Reinicia tu mysql usando

sudo service mysql restart

Ahora debería poder conectarse de forma remota a su mysql.


2
Esto no responde la pregunta.
CHarris

1
@ChristopheHarris, ¿por qué te sientes así? La respuesta claramente proporciona instrucciones paso a paso sobre cómo crear un nuevo usuario en MySQL que permita el acceso localhost y remoto a la base de datos utilizando ese usuario. ¿Puedes explicarme?
harishannam

1
No funciona para mi Todavía tengo el mismo error. No importa si lo intento con root o con un nuevo usuario: No puedo conectarme al servidor MySQL en 'xxx.xxx.xxx.xxx' ([Errno 61] Conexión rechazada)
baermathias

21

Usa este comando:

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';

Luego:

FLUSH PRIVILEGES; 

Luego comente la línea siguiente en el archivo "/etc/mysql/mysql.conf.d/mysqld.cnf" (¡es obligatorio!):

bind-address = 127.0.0.1 

¡Funciona para mi!


Muy buena. Importante la subvención. Si no, muchos errores para solicitudes comoyour-password-does-not-satisfy-the-current-policy-requirements
Alejandro Teixeira Muñoz

21

Para poder conectarse con su usuario desde cualquier dirección IP, haga lo siguiente:

Permita que el servidor mysql acepte conexiones remotas. Para este archivo mysqld.conf abierto:

sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf

Busque la línea que comienza con "bind-address" y establezca su valor en 0.0.0.0

bind-address                    = 0.0.0.0

y finalmente guarde el archivo.

Nota: Si está ejecutando MySQL 8+, la bind-addressdirectiva no estará en el mysqld.cnfarchivo por defecto. En este caso, agregue la directiva al final del archivo /etc/mysql/mysql.conf.d/mysqld.cnf.

Ahora reinicie el servidor mysql, ya sea con systemdo use el servicecomando anterior . Esto depende de su sistema operativo:

sudo systemctl restart mysql # for ubuntu    
sudo systemctl restart mysqld.service # for debian

Finalmente, el servidor mysql ahora puede aceptar conexiones remotas.

Ahora necesitamos crear un usuario y otorgarle permiso, para que podamos iniciar sesión con este usuario de forma remota.

Conéctese a la base de datos MySQL como root, o cualquier otro usuario con privilegios de root.

mysql -u root -p

ahora cree el usuario deseado tanto en localhost como en '%' comodín y otorgue permisos en todos los DB como tales.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

Luego,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

Y, por último, no te olvides de eliminar los privilegios

FLUSH PRIVILEGES;

Nota: Si ha configurado un firewall en su servidor de base de datos, también deberá abrir el puerto 3306 predeterminado del MySQL para permitir el tráfico a MySQL.

Espero que esto ayude ;)


2
sudo systemctl restart mysqld.service es para debian, tuve que usar sudo systemctl restart mysql.service es para ubuntu
ani0904071

Actualicé mi respuesta y agregué el comando de reinicio mysql para ambas distribuciones. gracias @ ani0904071
Imtiaz Shakil Siddique

17

Ejecute lo siguiente:

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';     
mysql> FLUSH PRIVILEGES;     
mysql> exit

Luego intente una conexión desde la dirección IP que especificó:

mysql -h address-of-remove-server -u root -p   

Deberías poder conectarte.




7

Para acceder de forma remota a la base de datos del servidor Mysql 8:

CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

5
  • INICIE MYSQL usando un usuario administrador
    • mysql -u admin-user -p (INTRODUCIR CONTRASEÑA EN LA PRONTA)
  • Crea un nuevo usuario:
    • CREAR USUARIO 'newuser' @ '%' IDENTIFICADO POR 'contraseña'; (% -> anyhost)
  • Privilegios de concesión:
    • OTORGAR SELECCIONAR, BORRAR, INSERTAR, ACTUALIZAR EN db_name. * TO 'newuser' @ '%';
    • PRIMEROS PRIVILEGIOS;

Si está ejecutando una instancia EC2, no olvide agregar las reglas de entrada en el grupo de seguridad con MYSQL / Aurura.


5

Editar archivo:

/etc/mysql/percona-server.cnf

Agregue el siguiente código en el archivo.

[mysqld] bind-address = 0.0.0.0

Crear usuario para acceso remoto.

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';   
mysql> FLUSH PRIVILEGES;    
mysql> exit

Todo el servidor Linux funciona,

Para MSWin c: \ Buscar ubicación de instalación \ ruta del archivo


[mysqld] necesita agregar el archivo, de lo contrario no funcionará correctamente
Tejas Tank

3

Simplemente cree el usuario en alguna base de datos como

GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'

Luego ve a

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfy cambia la línea bind-address = 127.0.0.1abind-address = 0.0.0.0

Después de eso, puede conectarse a esa base de datos desde cualquier IP.


3

Abra su mysql consoley ejecute el siguiente comando (ingrese su nombre de base de datos, nombre de usuario y contraseña):

OTORGAR TODO EN yourdatabasename. * A admin @ '%' IDENTIFICADO POR 'yourRootPassword';

Luego ejecutar:

PRIMEROS PRIVILEGIOS;

Abra la línea de comando y abra el archivo /etc/mysql/mysql.conf.d/mysqld.cnfusando cualquier editor con root privileges.

Por ejemplo:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Luego comente la siguiente línea:

dirección de enlace = 127.0.0.1

Reinicie mysql para reflejar los cambios usando el comando:

sudo service mysql restart

Disfrutar;)


2

Necesita cambiar el archivo de configuración de mysql:

Comience con la edición del archivo de configuración mysql

vim /etc/mysql/my.cnf

añadir:

bind-address = 0.0.0.0

0

En paneles de sitios web como cPanel, puede agregar un solo % (signo de porcentaje) en los nombres de host permitidos para acceder a su base de datos MySQL.

Al agregar uno solo %, puede acceder a su base de datos desde cualquier IP o sitio web, incluso desde aplicaciones de escritorio.


por favor no se refiera a algo como cPanel cuando se presenta una consulta directa, esto nunca mostrará un resultado funcional para nadie más
Tobias Hagenbeek

@TobiasHagenbeek Gracias por tus comentarios. Este método / truco no fue inventado por mí (es común en internet). Pero soy uno de los probadores de este método y descubrí que es el método más fácil y funcional por eso lo publiqué aquí. Sé que hay algunos riesgos de seguridad en este método que pueden ser descuidados.
Muhammad Saqib

0

Por ejemplo en mi CentOS

sudo gedit /etc/mysql/my.cnf

comentar las siguientes líneas

# dirección-enlace = 127.0.0.1

luego

servicio de sudo mysqld reiniciar


0

Si desea otorgar acceso remoto a su base de datos desde cualquier dirección IP, ejecute el comando mysql y luego ejecute el siguiente comando.

GRANT ALL PRIVILEGES ON *.*
TO 'root'@'%' 
IDENTIFIED BY 'password' 
WITH GRANT OPTION;

0

lo que funcionó en Ubuntu es otorgar todos los privilegios al usuario:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;

y configurando la dirección de enlace en /etc/mysql/mysql.conf.d/mysqld.cnf:

bind-address            = 0.0.0.0

luego reiniciando el demonio mysql:

service mysql restart

-7

Puede deshabilitar toda la seguridad editando /etc/my.cnf:

skip-grant-tables

esto elimina todos los requisitos de contraseña
kristopolous

55
Tenga en cuenta que no es recomendable tener esta opción habilitada en un entorno de producción, ya que esto permite que cualquiera se conecte sin una contraseña.
AStopher

sin embargo, esto es ideal para un entorno de desarrollo
DMCoding

Esto permite a las personas hackear su base de datos sin usar una contraseña.
MilkyWay90

@DanielJames, incluso para el entorno de desarrollo, es una idea terrible
Dragas
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.