Esto debería ser completamente simple, pero no puedo hacer que funcione por mi vida.
Solo bash conectarme de forma remota a mi servidor MySQL.
conectando como
mysql -u root -h localhost -p
funciona bien, pero tratando
mysql -u root -h 'any ip address here' -p
falla con el error
ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server
En la tabla mysql.user
, existe exactamente la misma entrada para el usuario ‘root’ con el host ‘localhost’ que otro con el host ‘%’.
Estoy en el extremo de mi ingenio, y no tengo idea de cómo proceder. Cualquier idea es bienvenida.
Posiblemente una precaución de seguridad. Podría intentar agregar una nueva cuenta de administrador:
mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' -> WITH GRANT OPTION; mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' -> WITH GRANT OPTION;
Aunque, como Pascal y otros han señalado, no es una gran idea tener un usuario con este tipo de acceso abierto a cualquier IP. Si necesita un usuario administrativo, use root y déjelo en localhost. Para cualquier otra acción, especifique exactamente los privilegios que necesita y limite la accesibilidad del usuario como lo sugiere Pascal a continuación.
Editar:
De las preguntas frecuentes de MySQL:
Si no puede averiguar por qué obtiene acceso denegado, elimine de la tabla de usuario todas las entradas que tengan valores de host que contengan comodines (entradas que contengan caracteres ‘%’ o ‘_’). Un error muy común es insertar una nueva entrada con Host = ‘%’ y User = ‘some_user’, pensando que esto le permite especificar localhost para conectarse desde la misma máquina. La razón por la que esto no funciona es que los privilegios predeterminados incluyen una entrada con Host = ‘localhost’ y User = ”. Debido a que esa entrada tiene un valor de host ‘localhost’ que es más específico que ‘%’, se usa con preferencia a la nueva entrada cuando se conecta desde localhost. El procedimiento correcto es insertar una segunda entrada con Host = ‘localhost’ y User = ‘some_user’, o para eliminar la entrada con Host = ‘localhost’ y User = ”. Después de eliminar la entrada, recuerde emitir una instrucción FLUSH PRIVILEGES para volver a cargar las tablas de permisos. Ver también la Sección 5.4.4, “Control de acceso, Etapa 1: Verificación de conexión”.
Uno tiene que crear un new MySQL User
y asignar privilegios como se muestra a continuación en la Query prompt
través de phpMyAdmin o el símbolo del sistema:
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;
Una vez hecho con las cuatro consultas, debe conectarse con username / password
Mi mensaje de error fue similar y dijo que ‘ Host XXX no puede conectarse a este servidor MySQL ‘ aunque estaba usando root. A continuación, le mostramos cómo asegurarse de que la raíz tenga los permisos correctos.
Mi configuración :
Solución
Comprobar:
Ahora acceda a la base de datos MySQL en su servidor real (digamos que su dirección remota es 123.123.123.123 en el puerto 3306 como usuario ‘root’ y quiero cambiar los permisos en la base de datos ‘dataentry’. Recuerde cambiar la dirección IP, el puerto y el nombre de la base de datos a su configuración)
mysql -u root -p Enter password: mysql>GRANT ALL ON *.* to root@'123.123.123.123' IDENTIFIED BY 'put-your-password'; mysql>FLUSH PRIVILEGES; mysql>exit
sudo service mysqld restart
Debe otorgar acceso al usuario desde cualquier nombre de host.
Así es como agrega un nuevo privilegio de phpmyadmin
Goto Privileges> Agregar un nuevo usuario
Seleccione cualquier host para el nombre de usuario deseado
Simplemente realice los siguientes pasos:
1) Conéctese a mysql
mysql -uroot -p
2) Crear usuario
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
3) otorgar permisos
GRANT ALL PRIVILEGES ON \*.\* TO 'user'@'%' WITH GRANT OPTION;
4) Flush priviledges
FLUSH PRIVILEGES;
El mensaje *Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server
es una respuesta del servidor MySQL al cliente MySQL. Observe cómo devuelve la dirección IP y no el nombre de host.
Si está intentando conectarse con mysql -h
y devuelve este mensaje con la dirección IP, entonces el servidor MySQL no puede realizar una búsqueda inversa en el cliente. Esto es crítico porque así es como se asigna el cliente MySQL a las concesiones.
Asegúrese de que puede hacer un nslookup
FROM el servidor MySQL. Si eso no funciona, entonces no hay entrada en el servidor DNS. Alternativamente, puede poner una entrada en el archivo HOSTS del servidor MySQL (
<
<- El orden aquí podría importar).
Una entrada en el archivo host de mi servidor que permite una búsqueda inversa del cliente MySQL solucionó este problema.
Si modifica las tablas de concesión manualmente (utilizando INSERTAR, ACTUALIZAR, etc.), debe ejecutar una instrucción FLUSH PRIVILEGES
para indicarle al servidor que vuelva a cargar las tablas de concesión.
PD: No recomendaría permitir que ningún host se conecte con ningún usuario (especialmente no con el uso de la root
). Si está utilizando mysql para una aplicación cliente / servidor, prefiera una dirección de subred. Si está utilizando mysql con un servidor web o servidor de aplicaciones, use direcciones IP específicas.
Una forma simple es iniciar sesión en phpmyadmin con la cuenta raíz, ir a la base de datos mysql y seleccionar la tabla de usuario, editar la cuenta raíz y en el campo host agregar% wild card. y luego a través de privilegios de ssh flush
FLUSH PRIVILEGES;
Simplemente use la interfaz provista por la herramienta GUI de MySql (SQLyog):
Haga clic en Administrador de usuarios:
Ahora, si desea otorgar acceso PARA CUALQUIER OTRA PC REMOTA, solo asegúrese de que, al igual que en la imagen de abajo, el valor del campo Host sea% (que es el comodín)
Si esta es una instalación reciente de MySQL, entonces antes de cambiar cualquier otra cosa, intente simplemente ejecutar este comando y luego intente de nuevo:
flush privileges;
Esto solo soluciona el problema para mí en Ubuntu 16.04, mysql 5.7.20. YMMV.
Bueno, lo que puedes hacer es abrir el archivo mysql.cfg y debes cambiar la dirección de enlace a este
bind-address = 127.0.0.1
y luego reinicia mysql y podrás conectar ese servidor a esto.
Mira esto, puedes tener una idea de eso.
esto es sol real
Si se está ejecutando en Windows; Una solución simple es ejecutar el asistente de configuración de la instancia del servidor MySQL. Está en tu grupo MYSQL en el menú de inicio. En la segunda pantalla, haga clic en el cuadro que dice “permitir el acceso raíz desde máquinas remotas”.
La mayoría de las respuestas aquí muestran cómo crear usuarios con dos valores de host: uno para localhost
y otro para %
.
Tenga en cuenta que a excepción de un usuario localhost integrado como root, no necesita hacer esto. Si simplemente desea crear un nuevo usuario que pueda iniciar sesión desde cualquier lugar, puede usar
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword'; GRANT ON TO myuser;
y funcionará bien. (Como otros han mencionado, es una idea terrible otorgar privilegios administrativos a un usuario desde cualquier dominio).
Solo encuentra una forma mejor de hacerlo desde tu panel de control de hosting (estoy usando DirectAdmin aquí)
simplemente vaya a la base de datos del servidor de destino en su panel de control, en mi caso: administración de MySQL -> seleccione su base de datos -> encontrará: “Hosts de acceso”, simplemente agregue su host remoto aquí y ¡está trabajando ahora!
Supongo que hay una opción similar en otros C.panels como plesk, etc.
Espero que haya sido útil para ti también.
Yo también estaba enfrentando el mismo problema. Lo resolví en 2 minutos para mí. Acabo de incluir una lista blanca por CP.
Supongamos que está intentando conectar la base de datos del servidor B desde el servidor A. Vaya al Panel B del servidor B-> MySQL remoto-> ingrese la dirección IP del servidor A y eso es todo.
Problema: root @ localhost no puede conectarse a una nueva instalación de mysql-community-server en openSUSE 42.2-1.150.x86_64. Mysql rechaza las conexiones – punto.
Solución:
$ ls -l /var/lib/mysql/mysql/user.* -rw-rw---- 1 mysql mysql 0 Apr 29 19:44 /var/lib/mysql/mysql/user.MYD -rw-rw---- 1 mysql mysql 1024 Apr 29 19:44 /var/lib/mysql/mysql/user.MYI -rw-rw---- 1 mysql mysql 10684 Apr 29 19:44 /var/lib/mysql/mysql/user.frm
El archivo user.MYD tiene 0 tamaño (¿en serio?). Copié los 3 archivos de otro sistema en funcionamiento.
$ /usr/sbin/rcmysql stop $ cd /var/lib/mysql/mysql/ $ scp root@othersytem:/var/lib/mysql/mysql/user.* ./ $ /usr/sbin/rcmysql start $ cd - $ mysql -u root -p
Pude iniciar sesión. Luego, solo se trató de volver a aplicar todos los privilegios de esquema. Además, si deshabilitó IPv6, vuelva a habilitarlo temporalmente para que la cuenta root @ :: 1 también funcione.
Esta respuesta podría ayudar a alguien …
Todas estas respuestas no ayudaron, entonces me di cuenta de que había olvidado revisar una cosa crucial … El puerto 🙂
Tengo mysql ejecutándose en un contenedor acoplable que se ejecuta en un puerto diferente. Estaba apuntando a mi máquina host en el puerto 3306, que tengo un servidor mysql ejecutándose. Mi contenedor expone el servidor en el puerto 33060. ¡Así que todo este tiempo, estaba buscando el servidor equivocado! doh!
En caso de que alguien que enfrenta este problema lo experimente desde SQLyog, esto sucedió:
Me había conectado a la base de datos remota (desde SQLyog) y trabajé durante algunas horas. Luego dejé el sistema por algunos minutos, luego volví para continuar con mi trabajo: ¡ ERROR 1130 ! Nada de lo que intenté funcionó; Reiniciar SQLyog no lo solucionó. Luego reinicié el sistema, todavía no funcionaba.
Así que traté de conectarme desde la terminal, funcionó. Luego lo reintenté en SQLyog … y funcionó. No puedo explicarlo más que ‘rareza aleatoria en la computadora’, pero creo que podría ayudar a alguien.
si intentas ejecutar la consulta mysql sin definir una conexión de cadena, obtendrás este error.
Probablemente olvide forzar la cadena de conexión antes de la ejecución. ¿has verificado esto? (perdón por el mal inglés)
Todas las respuestas aquí no funcionaron en mi caso, por lo que puedo considerar que esto puede ayudar a otros usuarios en el futuro. Esto también puede ser un problema en nuestro código, no solo en MySQL solo.
Si está usando VB.NET
En lugar de este código:
Dim server As String = My.Settings.DB_Server Dim username As String = My.Settings.DB_Username Dim password As String = My.Settings.DB_Password Dim database As String = My.Settings.DB_Database MysqlConn.ConnectionString = "server=" & server & ";" _ & "user id=" & username & ";" _ & "password=" & password & ";" _ & "database=" & database MysqlConn = New MySqlConnection()
Necesita mover MysqlConn = New MySqlConnection()
en la primera línea. Entonces sería así
MysqlConn = New MySqlConnection() Dim server As String = My.Settings.DB_Server Dim username As String = My.Settings.DB_Username Dim password As String = My.Settings.DB_Password Dim database As String = My.Settings.DB_Database MysqlConn.ConnectionString = "server=" & server & ";" _ & "user id=" & username & ";" _ & "password=" & password & ";" _ & "database=" & database