¿Cómo otorgar permisos de acceso remoto al servidor mysql para el usuario?

118

Si lo hago SHOW GRANTSen mi base de datos mysql obtengo

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION

Si no me equivoco, root@localhostsignifica que el usuario rootpuede acceder al servidor solo desde localhost. ¿Cómo le digo a MySQL que conceda rootel permiso para acceder a este servidor mysql desde cualquier otra máquina (en la misma red) también?

Aufwind
fuente
6
Simple cambio localhosta %otorgará acceso root a la red pública. No olvidesflush privileges;
6
Agregar root @% lo expone a un gran riesgo y no debe hacerse. Sé que esta es una publicación antigua, pero esa advertencia debería estar aquí. La cuenta raíz es la primera cuenta atacada por los atacantes, y root @ '%' significa que el usuario raíz puede conectarse a su cuenta MySQL desde cualquier lugar que desee. Hay mucho que cubrir en los comentarios, pero debería intentar eliminar tantos usuarios @ '%' como sea posible, y cualquiera que se declare en eso debería tener privilegios muy limitados. Pase lo que pase, definitivamente no debe agregar root @ '%', y sus aplicaciones tampoco deben esperar que esa cuenta esté presente.
Damon
Consulte también Habilitar conexión MySQL remota
usuario
Hola amigos, debería eliminar la cadena de CONTRASEÑA a este comando ... está causando un error ... simplemente termine con IDENTIFICADO POR y luego la contraseña en sí.
Mário de Sá Vera

Respuestas:

143

Esto otorga acceso de root con la misma contraseña desde cualquier máquina en *.example.com:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%.example.com' 
    IDENTIFIED BY 'some_characters' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

Si la resolución de nombres no va a funcionar, también puede otorgar acceso por IP o subred:

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

Documentos de GRANTsintaxis de MySQL .

Michael Berkowski
fuente
15
¿Supongo ...TO 'root'@'%' IDENTIFIED...que otorgaría acceso desde todas partes?
Aufwind
3
Ejecuté el comando en mysql, pero SHOW GRANTStodavía muestra lo mismo (como en mi pregunta). Incluso lo hice FLUSH PRIVILGES. ¿Hay algo que extraño?
Aufwind
@Aufwind No esperaría que necesites nada más además FLUSH PRIVILEGES. Cierre la sesión y vuelva a iniciarla, reinicie el servicio mysqld si tiene acceso. Además, asegúrese de que la skip networkinglínea no esté habilitada en su my.cnfaunque eso no explicaría que SHOW GRANTSaún no sea el mismo.
Michael Berkowski
@Aufwind En caso contrario, es posible que deba preguntar en ServerFault.com.
Michael Berkowski
10
Tenga en cuenta que IDENTIFIED BY PASSWORDse acompaña de un número hexadecimal de 41 dígitos con hash. Úselo IDENTIFIED BY 'password'si desea incluir la contraseña directamente.
Rainulf
94

Tratar:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Pa55w0rd' WITH GRANT OPTION;
Moshe Beeri
fuente
1
umm lo que Pa55w0rdparece una estupidez, no me digas que es la contraseña que quieres hacer. ¿Para todos los que intentan iniciar sesión en su mysql?
Habló el
23
Se usa comúnmente para dar un marcador de posición a la contraseña, diciendo "coloque su contraseña de lectura correcta en este lugar".
moshe beeri
2
Este comando con la advertencia habitual de que solo querrá usarlo para aplicaciones donde la seguridad no es un problema, por ejemplo, dev o QA.
einnocent
si no funciona en mac, intente cambiar 'root' @ '%' con 'root' @ 'localhost' o / etc / hosts nombre de la computadora a la que le está otorgando privilegios.
moshe beeri
2
No olvide ejecutar esto después:FLUSH PRIVILEGES;
dane
44

Debe seguir algunos pasos para asegurarse de que primero se pueda acceder a mysql y luego al usuario root desde el exterior:

  1. Disable skip-networkingen my.cnf(es decir: /etc/mysql/my.cnf)

  2. Verifique el valor de bind-addressin my.cnf, si está configurado en 127.0.0.1, puede cambiarlo a 0.0.0.0para permitir el acceso desde todas las IP o desde cualquier IP desde la que desee conectarse.

  3. Otorgue acceso remoto al usuario root desde cualquier ip (o especifique su ip en lugar de %)

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
        IDENTIFIED BY 'your_root_password'
        WITH GRANT OPTION;
    FLUSH PRIVILEGES;`
  4. Reinicie el servicio mysql:

    sudo service mysql restart
Khashayar
fuente
También necesita abrir el puerto mysql 3306 desde el firewall, de lo contrario, los clientes remotos no se conectarán
David Okwii
Solo un aviso rápido sobre el punto 2 de @Khashayar: 0.0.0.0 significa cualquier dirección IPv4. * significa CUALQUIER dirección, ya sea IPv4 o IPv6.
Gustavo Pinsard
34
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'YOUR_PASS' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;  

*.* = DB.TABLE puede restringir al usuario a una base de datos específica y una tabla específica.

'root'@'%'puede cambiar la raíz con cualquier usuario que haya creado y% es para permitir todas las direcciones IP. Puede restringirlo cambiando% .168.1.1, etc. también.


Si eso no se resuelve, modifique también my.cnf o my.ini y comente estas líneas

bind-address = 127.0.0.1para #bind-address = 127.0.0.1
y
skip-networkingpara#skip-networking

  • Reinicie MySQL y repita los pasos anteriores nuevamente.

Raspberry Pi, encontré la configuración de la dirección de enlace en \etc\mysql\mariadb.conf.d\50-server.cnf

Wasim A.
fuente
2
Solo responda que explique la parte *.*y 'user'@'address'. ¡Gracias! :)
Philipp
Otorgando TODO encendido . invita a los piratas informáticos a entrar
Rick James
por eso lo expliqué *. *
Wasim A.
8

Esas subvenciones de SQL que los demás comparten funcionan. Si aún no puede acceder a la base de datos, es posible que solo tenga una restricción de firewall para el puerto. Depende del tipo de servidor (y de los enrutadores intermedios) en cuanto a cómo abrir la conexión. Abra el puerto TCP 3306 de entrada y dele una regla de acceso similar para máquinas externas (todas / subred / IP única / etc.).

user171212
fuente
4

Abra el /etc/mysql/mysql.conf.d/mysqld.cnfarchivo y comente la siguiente línea:

#bind-address = 127.0.0.1
Vik2696
fuente
Trabajando en Ubuntu 19.4
Ngô Văn Thao
3

En mi caso, estaba intentando conectarme a un servidor mysql remoto en cent OS. Después de pasar por muchas soluciones (otorgar todos los privilegios, eliminar enlaces de IP, habilitar la red), el problema aún no se resolvía.

Resultó que, mientras buscaba varias soluciones, me encontré con iptables, lo que me hizo darme cuenta de que el puerto mysql 3306 no aceptaba conexiones.

Aquí hay una pequeña nota sobre cómo verifiqué y resolví este problema.

  • Comprobando si el puerto acepta conexiones:
telnet (ip del servidor mysql) [portNo]

-Agregar la regla de la tabla de IP para permitir conexiones en el puerto:

iptables -A ENTRADA -i eth0 -p tcp -m tcp --dport 3306 -j ACEPTAR

-No recomendaría esto para el entorno de producción, pero si sus iptables no están configuradas correctamente, es posible que agregar las reglas no resuelva el problema. En ese caso, se debe hacer lo siguiente:

parada de iptables de servicio

Espero que esto ayude.

Kushal
fuente
3

Dos pasos:

  1. configurar usuario con comodín:
    create user 'root'@'%' identified by 'some_characters'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'some_characters' WITH GRANT OPTION

  2. vim /etc/my.cnf
    agregue lo siguiente:
    bind-address=0.0.0.0

reinicie el servidor, no debería tener ningún problema para conectarse a él.

estudio1057
fuente
A continuación, aparece "ERROR 1827 (HY000): el hash de la contraseña no tiene el formato esperado. Compruebe si se está utilizando el algoritmo de contraseña correcto con la función PASSWORD ()". ¿Podría explicar qué me estoy equivocando aquí?
lampShadesDrifter
2

Con mysql 8 y versiones posteriores, no puede agregar un usuario otorgando privilegios. significa con esta consulta:

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

mysql devolverá este error:

ERROR 1064 (42000): Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de 'IDENTIFICADO POR' contraseña escrita 'en la línea 1

esto significa que no tiene un usuario root para% domain. por lo que primero debe insertar el usuario y luego otorgar privilegios como este:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'your password';
Query OK, 0 rows affected (0.11 sec)

mysql> GRANT ALL ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.15 sec)

mysql> FLUSH PRIVILEGES;

No olvide reemplazar las contraseñas con sus contraseñas específicas.

MhDG7
fuente
0

Esto funcionó para mí. Pero había un problema extraño que incluso yo probé primero a los que no afectaba. Actualicé la página phpmyadmin y de alguna manera lo hice funcionar.

Si necesita acceso a local-xampp-mysql. Puede ir a xampp-shell -> abrir el símbolo del sistema.

Luego mysql -uroot -p --port = 3306 o mysql -uroot -p (si hay una contraseña establecida). Después de eso, puede otorgarles acceso desde la página de shell de mysql (también puede trabajar desde localhost / phpmyadmin).

Solo agregue estos si alguien encuentra este tema y tiene problemas para principiantes.

Icemanzzz
fuente
0

Ubuntu 18.04

Instale y asegúrese de que mysqld us en ejecución.

Vaya a la base de datos y configure el usuario raíz:

sudo mysql -u root
SELECT User,Host FROM mysql.user;
DROP USER 'root'@'localhost';
CREATE USER 'root'@'%' IDENTIFIED BY 'obamathelongleggedmacdaddy';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

Edite los permisos de mysqld y reinicie:

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

# edit the line to be this:
bind-address=0.0.0.0

sudo systemctl stop mysql
sudo systemctl start mysql

Desde otra máquina, prueba .. El puerto de Obvs (3306) en la máquina mysqld debe permitir la conexión desde la máquina de prueba.

mysql -u root -p -h 123.456.789.666

Toda la "seguridad" adicional de MySql no ayuda a la seguridad en absoluto, solo complica y ofusca, ahora es más fácil estropearlo que en los viejos tiempos, donde solo usaba una contraseña realmente larga.

Peter Prographo
fuente