yes usuario password para for error denegado acceso mysql access-denied

mysql - usuario - navicat error 1045



MySQL ERROR 1045(28000): Acceso denegado para el usuario ''bill'' @ ''localhost''(usando la contraseña: YES) (30)

¡La solución es eliminar el usuario anónimo (Cualquiera)!

También me enfrenté con el mismo problema en una configuración de servidor por otra persona. Normalmente no elijo crear un usuario anónimo al instalar MySQL, por lo que no me di cuenta de esto. Inicialmente inicié sesión como usuario "raíz" y creé un par de usuarios "normales" (también conocidos como usuarios con privilegios solo en dbs con su nombre de usuario como prefijo), luego cerré la sesión y luego continué para verificar el primer usuario normal. No pude iniciar sesión. Ni a través de phpMyAdmin, ni a través de shell. Resulta que el culpable es este usuario "cualquiera".

Primero, permítame mencionar que he pasado por muchas preguntas sugeridas y no he encontrado una respuesta relevante. Esto es lo que estoy haciendo.

Estoy conectado a mi instancia de Amazon EC2. Puedo iniciar sesión con la raíz de MySQL con este comando:

mysql -u root -p

Entonces creé una nueva factura de usuario con host%

CREATE USER ''bill''@''%'' IDENTIFIED BY ''passpass'';

Concedidos todos los privilegios a la factura del usuario:

grant all privileges on *.* to ''bill''@''%'' with grant option;

Luego salgo del usuario root e intento iniciar sesión con bill:

mysql -u bill -p

Ingresé la contraseña correcta y obtuve este error:

ERROR 1045 (28000): Acceso denegado para el usuario ''bill'' @ ''localhost'' (usando la contraseña: SI)


Cuando corriste

mysql -u bill -p

y obtuve este error

ERROR 1045 (28000): Access denied for user ''bill''@''localhost'' (using password: YES)

mysqld espera que te conectes como bill@localhost

Intenta crear bill@localhost

CREATE USER bill@localhost IDENTIFIED BY ''passpass''; grant all privileges on *.* to bill@localhost with grant option;

Si desea conectarse de forma remota, debe especificar el nombre de DNS, la IP pública o 127.0.0.1 mediante TCP / IP:

mysql -u bill -p [email protected] mysql -u bill -p -h10.1.2.30 mysql -u bill -p -h127.0.0.1 --protocol=TCP

Una vez que inicie sesión, ejecute este

SELECT USER(),CURRENT_USER();

USER() informa cómo intentaste autenticarte en MySQL

CURRENT_USER() informa cómo se le permitió autenticarse en MySQL desde la tabla mysql.user

Esto le dará una mejor vista de cómo y por qué se le permitió iniciar sesión en mysql. ¿Por qué es importante saber este punto de vista? Tiene que ver con el protocolo de pedido de autenticación de usuario.

Aquí hay un ejemplo: Crearé un usuario anónimo en mi escritorio MySQL

mysql> select user,host from mysql.user; +---------+-----------+ | user | host | +---------+-----------+ | lwdba | % | | mywife | % | | lwdba | 127.0.0.1 | | root | 127.0.0.1 | | lwdba | localhost | | root | localhost | | vanilla | localhost | +---------+-----------+ 7 rows in set (0.00 sec) mysql> grant all on *.* to x@''%''; Query OK, 0 rows affected (0.02 sec) mysql> select user,host from mysql.user; +---------+-----------+ | user | host | +---------+-----------+ | lwdba | % | | mywife | % | | x | % | | lwdba | 127.0.0.1 | | root | 127.0.0.1 | | lwdba | localhost | | root | localhost | | vanilla | localhost | +---------+-----------+ 8 rows in set (0.00 sec) mysql> update mysql.user set user='''' where user=''x''; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) mysql> select user,host from mysql.user; +---------+-----------+ | user | host | +---------+-----------+ | | % | | lwdba | % | | mywife | % | | lwdba | 127.0.0.1 | | root | 127.0.0.1 | | lwdba | localhost | | root | localhost | | vanilla | localhost | +---------+-----------+ 8 rows in set (0.00 sec) mysql>

OK mirame iniciar sesión como usuario anónimo:

C:/MySQL_5.5.12>mysql -urol -Dtest -h127.0.0.1 --protocol=TCP Welcome to the MySQL monitor. Commands end with ; or /g. Your MySQL connection id is 12 Server version: 5.5.12-log MySQL Community Server (GPL) Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ''help;'' or ''/h'' for help. Type ''/c'' to clear the current input statement. mysql> select user(),current_user(); +---------------+----------------+ | user() | current_user() | +---------------+----------------+ | rol@localhost | @% | +---------------+----------------+ 1 row in set (0.00 sec) mysql>

El orden de autenticación es muy estricto. Comprueba de lo más específico a lo menos. Escribí sobre este estilo de autenticación en el DBA StackExchange .

No olvide llamar explícitamente a TCP como el protocolo para el cliente mysql cuando sea necesario.


Cuando escribe mysql -u root -p , se conecta al servidor mysql a través de un socket unix local.

Sin embargo, la subvención que otorgó, ''bill''@''%'' solo hace coincidir las conexiones TCP / IP con curiosidad.

Si desea otorgar acceso al zócalo de Unix local, debe otorgar privilegios a ''bill'' @ ''localhost'', que curiosamente no es lo mismo que ''bill''@''127.0.0.1''

También puede conectarse utilizando TCP / IP con el cliente de línea de comandos mysql, para que coincida con los privilegios que ya ha otorgado, por ejemplo, ejecute mysql -u root -p -h 192.168.1.123 o cualquier dirección IP local que tenga su casilla.


En la ventana, Cómo resolver ERROR 1045 (28000): Acceso denegado para el usuario ''root'' @ ''localhost'' (usando la contraseña: NO)

1) Uninstall mysql from control panel 2)Delete MySql folder from C:/Program Files,C:/Program Files (x86) and C:/ProgramData 3)Install mysql


Es una diferencia entre:

CREATE USER ''bill''@''%'' IDENTIFIED BY ''passpass'';

y

CREATE USER ''bill''@''localhost'' IDENTIFIED BY ''passpass'';

Revisalo:

mysql> select user,host from mysql.user; +---------------+----------------------------+ | user | host | +---------------+----------------------------+ | bill | % | <=== created by first | root | 127.0.0.1 | | root | ::1 | | root | localhost | | bill | localhost | <=== created by second +---------------+----------------------------+

El comando

mysql -u bill -p

acceso implícito a ''bill'' @ ''localhost'' y NO a ''bill'' @ ''%''.

No hay permisos para ''bill'' @ ''localhost''

te sale el error:

ERROR 1045 (28000): Access denied for user ''bill''@''localhost'' (using password: YES)

resolviendo el problema:

CREATE USER ''bill''@''localhost'' IDENTIFIED BY ''passpass''; grant all privileges on . to ''bill''@''localhost'' with grant option;


Espero que no haya hecho más daño al eliminar también el usuario debian-sys-maint en mysql

Haga que su demonio mysql se ejecute de forma normal. Inicie su cliente mysql como se muestra a continuación

mysql -u debian-sys-maint -p

En otra terminal, /etc/mysql/debian.cnf el archivo /etc/mysql/debian.cnf . Ese archivo contiene una contraseña; pegar esa contraseña cuando se le solicite.

http://ubuntuforums.org/showthread.php?t=1836919


Está bien, no estoy seguro, pero probablemente este sea el archivo my.cnf que se encuentra dentro del directorio de instalación de mysql y es el culpable. Comenta esta línea y el problema podría ser resuelto.

bind-address = 127.0.0.1


Esto también sucede cuando su contraseña contiene algunos caracteres especiales como @, $, etc. Para evitar esta situación, puede ajustar la contraseña en comillas simples:

$ mysql -usomeuser -p''s0mep@$$w0Rd''

O en lugar de eso, no use la contraseña mientras ingresa. Déjelo en blanco y luego escríbalo cuando el terminal lo solicite. Esta es la forma recomendada.

$ mysql -usomeuser -p Enter password: Welcome to the MySQL monitor. Commands end with ; or /g. Your MySQL connection id is 191 Server version: 5.5.46-0ubuntu0.14.04.2 (Ubuntu) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ''help;'' or ''/h'' for help. Type ''/c'' to clear the current input statement. mysql>


Guárdese de un dolor de cabeza MAYOR ... Su problema podría ser que le faltan las comillas en la contraseña. Al menos ese fue mi caso el que me desvió durante 3 horas.

[client] user = myusername password = "mypassword" # <----------------------- VERY IMPORTANT (quotes) host = localhost

http://dev.mysql.com/doc/refman/5.7/en/option-files.html

Busque "Aquí hay un archivo de opción de usuario típico:" y vea el ejemplo que indican allí. Buena suerte, y espero salvar a alguien más algún tiempo.


La mejor solución que encontré para mí es.

mi usuario es un sonar y siempre que intento conectarme a mi base de datos desde una máquina externa o de otro tipo, obtengo un error como

ERROR 1045 (28000): Access denied for user ''sonar''@''localhost'' (using password: YES)

También, ya que estoy intentando esto desde otra máquina y a través del trabajo de Jenkins, mi URL para acceder es

alm-lt-test.xyz.com

Si desea conectarse de forma remota, puede especificarlo de las siguientes maneras:

mysql -u sonar -p -halm-lt-test.xyz.com mysql -u sonar -p -h101.33.65.94 mysql -u sonar -p -h127.0.0.1 --protocol=TCP mysql -u sonar -p -h172.27.59.54 --protocol=TCP

Para acceder a esto con URL solo tienes que ejecutar la siguiente consulta.

GRANT ALL ON sonar.* TO ''sonar''@''localhost'' IDENTIFIED BY ''sonar''; GRANT ALL ON sonar.* TO ''sonar''@''alm-lt-test.xyz.com'' IDENTIFIED BY ''sonar''; GRANT ALL ON sonar.* TO ''sonar''@''127.0.0.1'' IDENTIFIED BY ''sonar''; GRANT ALL ON sonar.* TO ''sonar''@''172.27.59.54'' IDENTIFIED BY ''sonar'';


Los nombres de las cuentas de MySQL consisten en un nombre de usuario y un nombre de host. El nombre ''localhost'' en el nombre de host también indica que el host local también puede usar los caracteres comodín "%" y "_" en los valores de nombre de host o dirección IP. Estos tienen el mismo significado que para las operaciones de comparación de patrones realizadas con el operador LIKE. Por ejemplo, un valor de host de ''%'' coincide con cualquier nombre de host, mientras que un valor de ''% .mysql.com'' coincide con cualquier host en el dominio mysql.com. ''192.168.1.%'' Coincide con cualquier host en la red de clase C 192.168.1.

Lo anterior fue solo una introducción:

en realidad, tanto los usuarios ''bill''@''localhost'' como ''bill''@''%'' son cuentas MySQL diferentes, por lo tanto, ambos deben usar sus propios datos de autenticación, como la contraseña.

Para obtener más información, consulte http://dev.mysql.com/doc/refman//5.5/en/account-names.html


Me encontré con el mismo error. La configuración que no funcionó es la siguiente:

define("HOSTNAME", "localhost"); define("HOSTUSER", "van"); define("HOSTPASS", "helsing"); define("DBNAME", "crossbow"); $connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);

La configuración editada a continuación es la que la hizo funcionar. ¿Nota la diferencia?

define(''HOSTNAME'', ''localhost''); define(''HOSTUSER'', ''van''); define(''HOSTPASS'', ''helsing''); define(''DBNAME'', ''crossbow''); $connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);

La diferencia son las comillas dobles. Parecen ser bastante importantes en PHP en comparación con Java y tienen un impacto cuando se trata de escapar de caracteres, configurar URL y ahora, pasar parámetros a una función. Son más bonitos (lo sé) pero siempre usan comillas simples tanto como sea posible, entonces las comillas dobles se pueden anidar dentro de ellas si es necesario.

Este error apareció cuando probé mi aplicación en una caja de Linux en lugar de en un entorno de Windows.


No estoy seguro de que alguien más lo encuentre útil, pero encontré el mismo error y busqué por todos los usuarios anónimos ... y no hubo ninguno. El problema terminó siendo que la cuenta de usuario estaba configurada en "Requerir SSL", que encontré en PHPMyAdmin yendo a Cuentas de usuario y haciendo clic en Editar privilegios para el usuario. Tan pronto como desmarque esta opción, todo funcionó como se esperaba.


OS: windows

Mi mensaje de error es: "MySQL ERROR 1045 (28000): Acceso denegado para el usuario ''root'' @ ''localhost'' (usando la contraseña: SI)"

Mi razón no es abrir cmd con administrator permission

así que mi solución: abrir cmd con administrator permission , entonces funciona.


Para mí, este problema se debió a una nueva característica de MySQL 5.7.2: user entradas de user se ignoran si su campo de plugin está vacío.

Establézcalo en, por ejemplo, mysql_native_password para volver a habilitarlos:

UPDATE user SET plugin=''mysql_native_password'' WHERE user=''foo''; FLUSH PRIVILEGES;

Consulte las notas de la versión de MySQL 5.7.2 , en «Notas de autenticación».

Por alguna razón (tal vez porque se eliminaron mis hashes de contraseña anteriores a 4.1), la mysql_upgrade comandos mysql_upgrade no estableció un valor de complemento predeterminado.

Descubrí notando el siguiente mensaje de advertencia en /var/log/mysql/error.log :

[Advertencia] La entrada de usuario ''foo'' @ ''%'' tiene un valor de complemento vacío. El usuario será ignorado y nadie podrá iniciar sesión con este usuario nunca más.

Publico esta respuesta aquí para tal vez salvar a alguien de usar el mismo tiempo ridículo en esto como lo hice yo.


Probablemente tenga un usuario anónimo ''''@''localhost'' o ''''@''127.0.0.1'' .

Según el manual :

Cuando son posibles múltiples coincidencias, el servidor debe determinar cuál de ellas usar. Resuelve este problema de la siguiente manera: (...)

  • Cuando un cliente intenta conectarse, el servidor mira las filas [de la tabla mysql.user] en orden ordenado.
  • El servidor utiliza la primera fila que coincide con el nombre de host del cliente y el nombre de usuario.

(...) El servidor usa las reglas de clasificación que ordenan las filas con los valores de Host más específicos primero . Los nombres de host literales [como ''localhost''] y las direcciones IP son los más específicos.

Por lo tanto, tal usuario anónimo "enmascara" a cualquier otro usuario como ''[any_username]''@''%'' cuando se conecta desde localhost .

''bill''@''localhost'' coincide con ''bill''@''%'' , pero coincidiría (por ejemplo) ''''@''localhost'' antes de ''''@''localhost'' manos.

La solución recomendada es eliminar a este usuario anónimo (esto suele ser una buena opción).

Las ediciones a continuación son en su mayoría irrelevantes para la pregunta principal. Estos solo pretenden responder algunas preguntas planteadas en otros comentarios dentro de este hilo.

Editar 1

Autenticación como ''bill''@''%'' través de un socket.

root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock Welcome to the MySQL monitor (...) mysql> SELECT user, host FROM mysql.user; +------+-----------+ | user | host | +------+-----------+ | bill | % | | root | 127.0.0.1 | | root | ::1 | | root | localhost | +------+-----------+ 4 rows in set (0.00 sec) mysql> SELECT USER(), CURRENT_USER(); +----------------+----------------+ | USER() | CURRENT_USER() | +----------------+----------------+ | bill@localhost | bill@% | +----------------+----------------+ 1 row in set (0.02 sec) mysql> SHOW VARIABLES LIKE ''skip_networking''; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | skip_networking | ON | +-----------------+-------+ 1 row in set (0.00 sec)

Editar 2

Exactamente la misma configuración, excepto que reactivé la red, y ahora creo un usuario anónimo ''''@''localhost'' .

root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql Welcome to the MySQL monitor (...) mysql> CREATE USER ''''@''localhost'' IDENTIFIED BY ''anotherpass''; Query OK, 0 rows affected (0.00 sec) mysql> Bye root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass / --socket=/tmp/mysql-5.5.sock ERROR 1045 (28000): Access denied for user ''bill''@''localhost'' (using password: YES) root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass / -h127.0.0.1 --protocol=TCP ERROR 1045 (28000): Access denied for user ''bill''@''localhost'' (using password: YES) root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass / -hlocalhost --protocol=TCP ERROR 1045 (28000): Access denied for user ''bill''@''localhost'' (using password: YES)

Editar 3

La misma situación que en la edición 2, ahora proporciona la contraseña del usuario anónimo.

root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost Welcome to the MySQL monitor (...) mysql> SELECT USER(), CURRENT_USER(); +----------------+----------------+ | USER() | CURRENT_USER() | +----------------+----------------+ | bill@localhost | @localhost | +----------------+----------------+ 1 row in set (0.01 sec)

Conclusión 1, de la edición 1: se puede autenticar como ''bill''@''%'' través de un socket.

Conclusión 2, de la edición 2: si uno se conecta a través de TCP o a través de un socket no tiene ningún impacto en el proceso de autenticación (excepto que no se puede conectar como cualquier otra persona que no sea ''something''@''localhost'' través de un socket, obviamente).

Conclusión 3, de la edición 3: Aunque especifiqué la -ubill , se me ha otorgado acceso como usuario anónimo. Esto se debe a las "reglas de clasificación" recomendadas anteriormente. Tenga en cuenta que en la mayoría de las instalaciones predeterminadas, existe un usuario anónimo sin contraseña (y debe estar protegido / eliminado).


Resolví esto eliminando las entradas antiguas de ''factura'' del usuario con errores (esta es la parte importante: tanto de mysql.user como de mysql.db ), luego creé el mismo usuario que sad antes:

FLUSH PRIVILEGES; CREATE USER bill@localhost IDENTIFIED BY ''passpass''; grant all privileges on *.* to bill@localhost with grant option; FLUSH PRIVILEGES;

Trabajado, el usuario se está conectando. Ahora le quitaré algunos privilegios :)


Si olvida su contraseña o desea modificarla. Puede seguir estos pasos:

1: deja tu mysql

[root @ maomao ~] # service mysqld stop
Deteniendo MySQL: [OK]

2: use "--skip-grant-tables" para reiniciar mysql

[root @ mcy400 ~] # mysqld_safe --skip-grant-tables
[root @ cy400 ~] # Iniciando el demonio mysqld con bases de datos desde / var / lib / mysql

3: abre una nueva ventana e ingresa mysql -u root

[root @ cy400 ~] # mysql -u root
Bienvenido al monitor MySQL. Los comandos terminan con; o / g.

4: cambiar la base de datos de usuario

mysql> usa mysql
Lectura de la información de la tabla para completar los nombres de tablas y columnas. Puede desactivar esta función para obtener un inicio más rápido con el cambio de -A Base de datos

5: modifique su contraseña, su nueva contraseña debe ingresarse en "()"

mysql> actualizar la contraseña del conjunto de usuarios = contraseña (''root123'') donde usuario = ''root'';
Consulta OK, 3 filas afectadas (0.00 seg)
Filas emparejadas: 3 Cambiado: 3 Advertencias: 0

6: al ras

mysql> privilegios de descarga;

7: dejar de fumar

mysql> quit
Adiós

8: reiniciar mysql

[root @ cy400 ~] # service mysqld restart;
Deteniendo MySQL: [OK]
Iniciando MySQL: [OK]

Bingo! Puede conectar su base de datos con su nombre de usuario y nueva contraseña:

[root@cy400 ~]# mysql -u root -p <br> Enter password: admin123 <br> Welcome to the MySQL monitor. Commands end with ; or /g. <br> Your MySQL connection id is 2 <br> Server version: 5.0.77 Source distribution <br> Type ''help;'' or ''/h'' for help. Type ''/c'' to clear the buffer. <br> mysql> quit <br> Bye


Solo quería hacerle saber una circunstancia inusual que recibí el mismo error. Quizás esto ayude a alguien en el futuro.

Había desarrollado algunas vistas base, creadas en el sitio de desarrollo y transferidas al sitio de producción. Más tarde esa semana, cambié un script PHP y de repente surgieron errores de que Access fue denegado para el usuario ''local-web-user'' @ ''localhost''. El objeto de la fuente de datos no había cambiado, por lo que me concentré en el usuario de la base de datos en MySQL, preocupándome mientras tanto alguien hackeó mi sitio web. Por suerte el resto del sitio parecía ileso.

Más tarde resultó que los puntos de vista eran el (los) culpable (s). Nuestras transferencias de objetos se realizan utilizando otro usuario (y remoto: admin @ ip-address) que el usuario del sitio web local. Así que las vistas se crearon con ''admin'' @ ''ip-address'' como definidor. La creación de vista SEGURIDAD por defecto es

SQL SECURITY DEFINER

Cuando el usuario local-web intenta usar la vista, tropieza con los privilegios que faltan del definidor para usar las tablas. Una vez que se cambió la seguridad a:

SQL SECURITY INVOKER

el problema fue resuelto El problema real fue completamente diferente al anticipado según el mensaje de error.


Super tarde a esto

Probé todas estas otras respuestas y ejecuté muchas versiones diferentes de mysql -u root -p pero nunca ejecuté

mysql -u root -p

Y simplemente presionando [ENTER] para la contraseña.

Una vez que hice eso funcionó. Espero que esto ayude a alguien.


Tratar:

~$ mysql -u root -p Enter Password: mysql> grant all privileges on *.* to bill@localhost identified by ''pass'' with grant option;


Tuve un problema algo similar: en mi primer intento de ingresar a MySql, como root, me dijo que el acceso era denegado. Resulta que me olvidé de usar el sudo ...

Entonces, si falla en el primer intento de root, intente:

sudo mysql -u root -p

y luego ingrese su contraseña, esto debería funcionar.


Un problema relacionado en mi caso fue intentar conectar usando:

mysql -u mike -p mypass

Aparentemente, se permite el espacio en blanco entre -u # uname # pero NO entre -p y # password #

Por lo tanto se necesita:

mysql -u mike -pmypass

De lo contrario, con espacios en blanco entre -p mypass mysql toma ''mypass'' como nombre de db


Resumen de depuración

  • Compruebe si hay error tipográfico: nombre de usuario o contraseña.
  • Compruebe el nombre de host y compárelo con el nombre de host de la tabla mysql.user.
  • Compruebe que el usuario existe o no.
  • Compruebe si el host contiene la dirección IP o el nombre del host.

Existe una gran posibilidad de que, es posible que haya encontrado este problema varias veces en su trabajo. Este problema se me ocurrió la mayoría de las veces debido a la introducción incorrecta de nombre de usuario o contraseña. Aunque esta es una de las razones, existen otras muchas posibilidades de que tenga este problema. A veces, parece muy similar, pero cuando profundiza, se dará cuenta de múltiples factores que contribuyen a este error. Esta publicación explicará en detalle, la mayoría de las razones comunes y evitará este problema.

Posibles razones:

  • Caso 1: Error tipográfico: nombre de usuario o contraseña.

Esta es la razón más común de este error. Si ingresó el nombre de usuario o contraseña incorrectamente, seguramente obtendrá este error.

Solución:

La solución para este tipo de error es muy simple. Solo ingresa el nombre de usuario y contraseña correctos. Este error será resuelto. En caso de que si olvida la contraseña, puede restablecer el nombre de usuario / contraseña. Si olvida la contraseña de la cuenta de administrador / root, hay muchas formas de restablecer / recuperar la contraseña de root. Publicaré otra publicación sobre cómo restablecer la contraseña de root en caso de que olvide la contraseña de root.

  • Caso 2: Acceso desde el host incorrecto.

MySQL proporciona una restricción basada en el host para el acceso de los usuarios como características de seguridad. En nuestro entorno de producción, solíamos restringir la solicitud de acceso solo a los servidores de aplicaciones. Esta característica es realmente útil en muchos escenarios de producción.

Solución:

Cuando enfrente este tipo de problema, primero verifique si su host está permitido o no al verificar la tabla mysql.user. Si no está definido, puede actualizar o insertar un nuevo registro en la tabla mysql.user. En general, el acceso como usuario root desde una máquina remota está deshabilitado y no es una buena práctica, debido a problemas de seguridad. Si tiene requisitos para acceder a su servidor desde varias máquinas, otorgue acceso solo a esas máquinas. Es mejor no usar comodines (%) y da accesos universales. Permítame actualizar la tabla mysql.user, ahora el demouser puede acceder al servidor MySQL desde cualquier host.

  • Caso 3: El usuario no existe en el servidor.

Este tipo de error se produce cuando el usuario al que intenta acceder no existe en el servidor MySQL.

Soluciones:

Cuando enfrente este tipo de problema, simplemente verifique si el usuario existe en la tabla mysql.user o no. Si el registro no existe, el usuario no puede acceder. Si hay un requisito para que ese usuario acceda, cree un nuevo usuario con ese nombre de usuario.

  • Caso 4: Mezcla de hosts numéricos y basados ​​en nombres.

Puntos importantes

  • No es recomendable usar comodines al definir el host del usuario, intente usar el nombre de host exacto.

  • Deshabilite el inicio de sesión de root desde la máquina remota.

  • Utilizar el concepto de usuario proxy.

Hay algunos otros conceptos relacionados con este tema y entrar en detalles de esos temas es muy diferente al alcance de este artículo. Analizaremos los siguientes temas relacionados en los próximos artículos.

  • Qué hacer, si olvidó la contraseña de root en el servidor MySQL.
  • Problemas de privilegios de acceso a MySQL y tablas relacionadas con el usuario.
  • Funciones de seguridad MySQL con las mejores prácticas.

Espero que esta publicación te ayude a solucionar el Código de error de MySQL 1045. Acceso denegado para el usuario en MySQL.


El problema también puede ocurrir si está utilizando una versión anterior de la IU de MySQL (como SQLYoug) que genera contraseñas con hash incorrecto.

Crear un usuario con script SQL solucionará el problema.


El signo de porcentaje significa que todos los ip''s, así que localhost es superfluo ... No hay necesidad del segundo registro con el localhost.

En realidad, existe, ''localhost'' es especial en mysql, significa una conexión a través de un socket Unix (o tuberías con nombre en Windows, creo) en lugar de un socket TCP / IP. usando% como el host no incluye ''localhost''

Las cuentas de usuario de MySQL tienen dos componentes: un nombre de usuario y un nombre de host. El nombre de usuario identifica al usuario, y el nombre de host especifica desde qué hosts se puede conectar ese usuario. El nombre de usuario y el nombre de host se combinan para crear una cuenta de usuario:

''<user_name>''@''<host_name>'' Puede especificar una dirección IP específica o un rango de direcciones para el nombre del host, o usar el carácter de porcentaje ("%") para permitir que el usuario inicie sesión desde cualquier host.

Tenga en cuenta que las cuentas de usuario se definen tanto por el nombre de usuario como por el nombre de host. Por ejemplo, ''root''@''%''es una cuenta de usuario diferente a ''root''@''localhost''.


Tuve el mismo problema que el OP al intentar acceder a un contenedor docker MYSQL creado con compose que tenía una contraseña muy larga:

# docker-compose.yml snippet services: db: environment: MYSQL_ROOT_PASSWORD: some_password_more_than_32_characters

La reducción de la longitud de la contraseña y la reconstrucción a través de la redacción me permitieron acceder al contenedor MYSQL con un cliente como Workbench.


Asegúrese de que no haya otras instancias de SQL en ejecución que estén utilizando la publicación localhost. En nuestro caso, otra instancia se estaba ejecutando en el host local que estaba en conflicto con el inicio de sesión. Apagándolo resolví este problema.


Cuando se ejecuta mysql -u bill -p, localhostse resuelve en su ip, ya que es 127.0.0.1 y en su /etc/hostsarchivo, ya que 127.0.0.1 localhostexiste por defecto . Entonces, mysql te interpreta como bill@localhostque no se concede con bill@''%''. Es por esto que hay 2 registros diferentes para el rootusuario en el resultado de la select host, user from mysql.user;consulta.

Hay dos formas de manejar este problema.

Una es especificar una IP que no se resuelve de manera inversa por /etc/hostsarchivo cuando intenta iniciar sesión. Por ejemplo, la ip del servidor es 10.0.0.2. Cuando ejecute el comando mysql -u bill -p -h 10.0.0.2, podrá iniciar sesión. Si escribe select user();, obtendrá [email protected]. Por supuesto, cualquier nombre de dominio no debe ser resuelto a esta ip en su /etc/hostsarchivo.

En segundo lugar, necesita otorgar acceso para este nombre de dominio específico. Para bill@localhost, deberias llamar comandogrant all privileges on *.* to bill@localhost identified by ''billpass''; .En este caso, podrás iniciar sesión con el comando mysql -u bill -p. Una vez iniciado, el select user();comando vuelve bill@localhost.

Pero esto es solo para eso, intenta iniciar sesión en un servidor mysql en el mismo host. Desde hosts remotos, mysql se comporta de manera esperada, ''%'' le permitirá iniciar sesión.


Tuve el mismo problema, pero en mi caso la solución se resolvió con el comentario de eggyal. También tuve un usuario anónimo, pero eliminarlo no resolvió el problema. El comando ''FLUSH PRIVILEGES'' funcionó sin embargo.

Lo sorprendente para mí de esto fue que creé al usuario con MySQL Workbench y habría esperado que realizara todas las funciones necesarias para completar la tarea.