Primero permítanme mencionar que revisé muchas preguntas sugeridas y no encontré ninguna respuesta relevante. Esto es lo que estoy haciendo.
Estoy conectado a mi instancia de Amazon EC2. Puedo iniciar sesión con MySQL root con este comando:
mysql -u root -p
Luego creé una nueva factura de usuario con el host%
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
Concedidos todos los privilegios para facturar al 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 recibí este error:
ERROR 1045 (28000): acceso denegado para el usuario 'factura' @ 'localhost' (usando la contraseña: SÍ)
mysql
access-denied
Ali
fuente
fuente
FLUSH PRIVILEGES
?Respuestas:
Probablemente tenga un usuario anónimo
''@'localhost'
o''@'127.0.0.1'
.Según el manual :
Por lo tanto, dicho usuario anónimo "enmascararía" a cualquier otro usuario
'[any_username]'@'%'
al conectarselocalhost
.'bill'@'localhost'
coincide'bill'@'%'
, pero coincidiría (por ejemplo)''@'localhost'
antes de las manos.La solución recomendada es eliminar a este usuario anónimo (de todos modos, esto es algo bueno).
Las ediciones a continuación son en su mayoría irrelevantes para la pregunta principal. Estos solo están destinados a responder algunas preguntas planteadas en otros comentarios dentro de este hilo.
Editar 1
Autenticando como a
'bill'@'%'
través de un zócalo.Editar 2
Exactamente la misma configuración, excepto que reactivé las redes y ahora creo un usuario anónimo
''@'localhost'
.Editar 3
La misma situación que en la edición 2, ahora proporciona la contraseña del usuario anónimo.
Conclusión 1, de la edición 1: se puede autenticar como a
'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
'something'@'localhost'
, obviamente, no se puede conectar como nadie más que a través de un socket).Conclusión 3, de la edición 3: aunque especifiqué
-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 asegurarse / eliminarse).fuente
DROP USER ''@'localhost';
. No son necesarios para algún propósito especial.Tratar:
fuente
Cuando corriste
y obtuve este error
mysqld espera que te conectes como
bill@localhost
Intenta crear
bill@localhost
Si desea conectarse de forma remota, debe especificar el nombre DNS, la IP pública o 127.0.0.1 usando TCP / IP:
Una vez que inicie sesión, ejecute esto
USER () informa cómo intentó autenticarse en MySQL
CURRENT_USER () informa cómo se le permitió autenticarse en MySQL desde la tabla mysql.user
Esto le dará una mejor visión de cómo y por qué se le permitió iniciar sesión en mysql. ¿Por qué es importante saber esta opinión? 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
OK, mírame iniciar sesión como usuario anónimo:
El pedido 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 protocolo para el cliente mysql cuando sea necesario.
fuente
'bill'@'localhost'
debería coincidir'bill@%'
, ¿no?SELECT USER(),CURRENT_USER();
. Casi nunca se ven usuarios anónimos de estas dos funciones, excepto en configuraciones realmente pobres.mysql.user
. De hecho, si vuelve a leer mi respuesta, verá que dije (en realidad, dice el manual) que el orden de clasificación se basahost
primero en la columna. Escribió mucho sobre cómo verificar sus credenciales actuales, pero veo poca información sobre por qué'bill'@'localhost'
no puede iniciar sesión'bill'@'%'
, que es la pregunta de hoy AFAIK. El OP probablemente tenga una configuración deficiente, es por eso que obtiene estos errores.--protocol=TCP
Fue la clave. ¡Muchas gracias!Súper tarde para esto
Intenté todas estas otras respuestas y ejecuté muchas versiones diferentes de
mysql -u root -p
pero nunca solo ejecutémysql -u root -p
Y solo presionando
[ENTER]
para la contraseña.Una vez que hice eso funcionó. Espero que esto ayude a alguien.
fuente
Un problema relacionado en mi caso fue intentar conectar usando:
El espacio en blanco es aparentemente permitió que entre el -u # uname #, pero no entre el -p y # contraseña #
Por lo tanto, se necesita:
De lo contrario, con un espacio en blanco entre -p mypass MySQL toma 'mypass' como el db nombre
fuente
Cuando escribe
mysql -u root -p
, se está conectando al servidor mysql a través de un socket unix local.Sin embargo, la subvención que otorgó
'bill'@'%'
solo coincide con las conexiones TCP / IP curiosamente.Si desea otorgar acceso al socket local de Unix, debe otorgar privilegios a 'bill' @ 'localhost', que curiosamente no es lo mismo que 'bill'@'127.0.0.1'
También puede conectarse mediante TCP / IP con el cliente de línea de comandos mysql, para que coincida con los privilegios que ya le otorgó, por ejemplo, ejecutar
mysql -u root -p -h 192.168.1.123
o la dirección IP local que tenga su casilla.fuente
skip-networking
'bill'@'%'
través de un socket en una v5.5.Si olvida su contraseña o desea modificarla, puede seguir estos pasos:
Bingo! Puede conectar su base de datos con su nombre de usuario y nueva contraseña:
fuente
mysql.server stop
. En mi caso, no pude actualizar la columna de usuario porque no hay una; tampoco pudo crear uno porque está en modo seguro. Por lo que estoy haciendo en este momento no me importa, pero realmente aprecio este formato de respuesta con las entradas y salidas exactas que se muestran. ¡Gracias!Ahórrate un dolor de cabeza MAYOR ... Tu problema podría ser que te faltan las comillas alrededor de la contraseña. Al menos ese fue mi caso que me desvió durante 3 horas.
http://dev.mysql.com/doc/refman/5.7/en/option-files.html
Busque "Aquí hay un archivo de opciones de usuario típico:" y vea el ejemplo que dicen allí. Buena suerte y espero salvar a alguien más en algún momento.
fuente
¡La solución es eliminar el usuario anónimo (Cualquiera)!
También enfrenté el mismo problema en la configuración de un servidor por otra persona. Normalmente no elijo crear un usuario anónimo al instalar MySQL, así que no me di cuenta de esto. Inicialmente, inicié sesión como usuario "root" 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é sesión y luego verifiqué al 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 "Cualquier".
fuente
Tuve un problema algo similar: en mi primer intento de ingresar a MySQL, ya
root
que me dijo que tenía acceso denegado. Resulta que olvidé usar elsudo
...Entonces, si falla en el
root
primer intento, intente:y luego ingrese su contraseña, esto debería funcionar.
fuente
La mejor solución que encontré para mí es.
mi usuario es sonar y cada vez que intento conectarme a mi base de datos desde una máquina externa u otra, recibo un error como
Además, como estoy intentando esto desde otra máquina y a través del trabajo de Jenkins, mi URL para acceder es
si desea conectarse de forma remota, puede especificarlo de diferentes maneras de la siguiente manera:
Para acceder a esto con URL solo tiene que ejecutar la siguiente consulta.
fuente
De acuerdo, no estoy seguro, pero probablemente este sea el archivo my.cnf dentro del directorio de instalación de mysql. Comente esta línea y el problema podría resolverse.
fuente
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 las transferí al sitio de producción. Más tarde esa semana cambié un script PHP y de repente surgieron errores de acceso denegado para el usuario 'local-web-user' @ 'localhost'. El objeto 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 alguien pirateaba mi sitio web. Afortunadamente, el resto del sitio parecía ileso.
Más tarde resultó que las vistas eran las culpables. Nuestras transferencias de objetos se realizan utilizando otro usuario (y remoto: admin @ dirección IP) que el usuario del sitio web local. Por lo tanto, las vistas se crearon con 'admin' @ 'ip-address' como definidor. El valor predeterminado de SEGURIDAD de creación de vista es
Cuando el usuario local de la web intenta usar la vista, se topa con los privilegios de falta del definidor para usar las tablas. Una vez que se cambió la seguridad a:
El problema fue resuelto. El problema real era completamente diferente al anticipado según el mensaje de error.
fuente
Es una diferencia entre:
y
Revisalo:
El comando
acceso implícito a 'bill' @ 'localhost' y NO a 'bill' @ '%'.
No hay permisos para 'bill' @ 'localhost'
obtienes el error:
resolviendo el problema:
fuente
Esto también sucede cuando su contraseña contiene algunos caracteres especiales como @, $, etc. Para evitar esta situación, puede ajustar la contraseña entre comillas simples:
O en su lugar, no use la contraseña al ingresar. Déjelo en blanco y luego escríbalo cuando el terminal le pregunte. Esta es la forma recomendada.
fuente
pwgen
. Hoy generé uno nuevo para una base de datos MySQL y su usuario. Lamentablemente, la contraseña contenía una barra invertida "\" que no identifiqué como el origen de los errores (ni siquiera pensé en eso). Entonces, busqué durante horas una solución. Después de establecer la contraseña en "123" con desesperación, el inicio de sesión finalmente funcionó. ... Los usuarios deben tener en cuenta que algunos caracteres especiales pueden causar problemas, ya que MySQL no muestra advertencias sobre el uso de contraseñas como "daiy4ha4in7chooshuiphie \ Th * aew", por ejemplo.Para mí, este problema fue causado por una nueva característica de MySQL 5.7.2: las
user
entradas se ignoran si suplugin
campo está vacío.Ajústelo a, por ejemplo,
mysql_native_password
para volver a habilitarlos: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), el
mysql_upgrade
script no estableció un valor de complemento predeterminado.Me di cuenta al notar el siguiente mensaje de advertencia en
/var/log/mysql/error.log
:Publico esta respuesta aquí para quizás salvar a alguien de usar la misma cantidad de tiempo ridículo en esto que yo.
fuente
No estoy seguro de si alguien más lo encontrará útil, pero encontré el mismo error y busqué por todos los usuarios anónimos ... y no había ninguno. El problema terminó siendo que la cuenta de usuario estaba configurada como "Requerir SSL", que encontré en PHPMyAdmin yendo a Cuentas de usuario y haciendo clic en Editar privilegios para el usuario. Tan pronto como desactivé esta opción, ¡todo funcionó como se esperaba!
fuente
Resumen de depuración
Existe una gran posibilidad de que haya encontrado este problema varias veces en su trabajo. Este problema se me ocurrió la mayoría de las veces debido a que ingresó incorrectamente el nombre de usuario o la contraseña. Aunque esta es una de las razones, hay otras muchas posibilidades de que pueda tener este problema. A veces, se ve muy similar, pero cuando profundice, 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 solucionará este problema.
Posibles razones:
Esta es la razón más común para 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. Simplemente ingrese el nombre de usuario y contraseña correctos. Este error será resuelto. En caso de que olvide la contraseña, puede restablecer el nombre de usuario / contraseña. Si olvida la contraseña para 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 olvides la contraseña de root.
MySQL proporciona restricciones basadas en 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, verificando 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 práctica recomendada debido a problemas de seguridad. Si tiene requisitos para acceder a su servidor desde múltiples máquinas, otorgue acceso solo a esas máquinas. Es mejor no usar comodines (%) y proporciona accesos universales. Permítanme actualizar la tabla mysql.user, ahora el demouser puede acceder al servidor MySQL desde cualquier host.
Este tipo de error ocurre cuando el usuario, al que está intentando 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.
Puntos importantes
No es aconsejable usar comodines al definir el host del usuario, intente usar el nombre exacto del host.
Deshabilite el inicio de sesión raíz desde la máquina remota.
Usar el concepto de usuario proxy.
Hay algunos otros conceptos relacionados con este tema y entrar en detalles de esos temas es un alcance muy diferente de este artículo. Examinaremos los siguientes temas relacionados en los próximos artículos.
Espero que esta publicación le ayude a corregir el Código de error de MySQL 1045 Acceso denegado para el usuario en MySQL.
fuente
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 la manera normal. Inicie su cliente mysql como se muestra a continuación
En otra terminal,
cat
el archivo/etc/mysql/debian.cnf
. Ese archivo contiene una contraseña; pegue esa contraseña cuando se le solicite.http://ubuntuforums.org/showthread.php?t=1836919
fuente
Descubrí otro caso que parece ser un caso de borde; Puedo exportar al sistema de archivos, a través de SELECT INTO .. OUTFILE como root, pero no como usuario habitual. Si bien esto puede ser una cuestión de permisos, lo he visto y no veo nada especialmente obvio. Todo lo que puedo decir es que ejecutar la consulta como un usuario normal que tiene todos los permisos en la base de datos en cuestión devuelve el error de acceso denegado que me llevó a este tema. Cuando encontré la transcripción de un uso exitoso de SELECT INTO ... OUTFILE en un proyecto antiguo, noté que estaba conectado como root. Efectivamente, cuando inicié sesión como root, la consulta se ejecutó como se esperaba.
fuente
Actualización: en v8.0.15 (tal vez esta versión) la
PASSWORD()
función no funciona.Tienes que:
sudo mysqld_safe --skip-grant-tables
mysql -u root
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
fuente
Cuando se ejecuta
mysql -u bill -p
,localhost
se resuelve en su ip, ya que es 127.0.0.1 y en su/etc/hosts
archivo, por defecto127.0.0.1 localhost
existe. Entonces, mysql te interpreta como algobill@localhost
que no está garantizadobill@'%'
. Es por eso que hay 2 registros diferentes para elroot
usuario como resultado de laselect host, user from mysql.user;
consulta.Hay dos formas de manejar este problema.
Uno está especificando una IP que no se resuelve de forma inversa por
/etc/hosts
archivo cuando intenta iniciar sesión. Por ejemplo, la ip del servidor es10.0.0.2
. Cuando ejecute el comandomysql -u bill -p -h 10.0.0.2
, podrá iniciar sesión. Si escribeselect user();
, obtendrá[email protected]
. Por supuesto, cualquier nombre de dominio no debe resolverse a esta ip en su/etc/hosts
archivo.En segundo lugar, debe otorgar acceso para este nombre de dominio específico. Para
bill@localhost
, debe llamar al comandogrant all privileges on *.* to bill@localhost identified by 'billpass';
. En este caso, podrá iniciar sesión con el comandomysql -u bill -p
. Una vez conectado, elselect user();
comando regresabill@localhost
.Pero esto es solo para que intente 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.
fuente
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:
Trabajado, el usuario se está conectando. Ahora eliminaré algunas previlegies :)
fuente
Encontré el mismo error. La configuración que no funcionaba es la siguiente:
La configuración editada a continuación es la que lo hizo funcionar. ¿Nota la diferencia?
La diferencia son las comillas dobles. Parecen ser bastante significativos en PHP en comparación con Java y tienen un impacto cuando se trata de escapar caracteres, configurar URL y ahora, pasar parámetros a una función. Son más bonitas (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.
fuente
Tuve problemas similares porque mi contraseña contiene ";" char rompiendo mi contraseña cuando la creo en el primer momento. Tenga cuidado con esto si puede ayudarlo.
fuente
Esto puede aplicarse a muy pocas personas, pero aquí va. No uses una exclamación
!
en su contraseña.Lo hice y obtuve el error anterior usando MariaDB. Cuando lo simplifiqué a solo números y letras, funcionó. Otros personajes como
@
y$
funcionan bien: utilicé esos caracteres en un usuario diferente en la misma instancia.La quinta respuesta en esta dirección me llevó a mi solución.
fuente
En Windows, aquí se explica cómo resolver:
C:\Program Files,C:\Program Files (x86)
yC:\ProgramData
fuente
Esto también puede suceder si MySQL se ejecuta en un sistema operativo que no distingue entre mayúsculas y minúsculas, como Windows.
Por ejemplo, descubrí que falló el intento de conectarme a una base de datos usando estas credenciales:
mysql>
grant select on databaseV105.* to 'specialuser' identified by 's3curepa5wrd';
$ mysql -specialuser' -p's3curepa5wrd' -h10.61.130.89 databaseV105
Pero, esto tuvo éxito:
mysql>
grant select on databasev105.* to 'specialuser' identified by 's3curepa5wrd';
$ mysql -specialuser' -h10.300.300.400 databaseV105 -p
fuente
Si las longitudes de las cadenas dbname, nombre de usuario, contraseña, etc. superan los valores descritos en https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html#grant-tables-scope-column-properties , usted también podría fallar al iniciar sesión, ya que esto fue en mi caso.
fuente
¡Hoy en día! Solución para :
Wampserver 3.2.0 nueva instalación o actualización
Probablemente
xamp
usarlomariaDB
por defecto está bien.Wamp
el servidor viene conmariaDB
y mysql, e instalaciónmariaDB
por defecto en el puerto 3306 y mysql en 3307, puerto a veces 3308.Conéctate a
mysql
!En la instalación, pide usar
mariaDB
oMySql
, pero mariaDB está marcado como predeterminado y no puede cambiarlo, verifique lamysql
opción e instale.cuando se complete la instalación, ambos se ejecutarán
mariaDB
en el puerto predeterminado 3306 ymysql
en otro puerto 3307 o 3308.Haga clic con el botón derecho en el
wampserver
ícono donde su ejecución debe estar en la esquina inferior derecha, vaya a herramientas y vea sumysql
puerto de ejecución correcto .E inclúyalo en su conexión de base de datos igual que folowng:
Note :
Estoy usando pdoVea aquí para más información: https://sourceforge.net/projects/wampserver/
fuente