La base de datos de usuario de MySQL no tiene columnas de contraseña: instalación de MySQL en OSX

172

Estoy tratando de cambiar la contraseña de root de MySql.

Lo que he hecho está abajo.

  1. Instale MySql-5.7.6 ~ .dmg (Community Server) y workbench.
  2. Apague el servidor en las preferencias del sistema OSX.
  3. Acceda a MySql con la consola. El comando fuemysqld_safe --skip-grant
  4. Ejecutar update user set password=password('1111') where user='root';y recibí un mensaje de error -> ERROR 1054 (42S22): Unknown column 'password' in 'field list'.

FYI, lo hice use mysql;. Así que seleccioné la consulta en la tabla de usuario y encontré que la columna de contraseña en realidad no existe.

Es muy raro ¿Es posible que la tabla de usuario original no tenga una columna de contraseña?

¿Cómo puedo cambiar la contraseña, que no existe?

Gracias por tu respuesta: D

Juneyoung Oh
fuente
Ahora prueba otra vez y puedo acceder a MySQL sin PW :( Es bien al cambio (I tabla de usuario alter media y añadir a la columna contraseña a través de la consulta) tabla de usuario?
Juneyoung Oh
SET PASSWORD para root @ localhost = contraseña ('new-pass') - funciona para cualquier versión de mysql
SIDU
UPDATE mysql.user SET authentication_string= 'password' WHERE User = 'root'; Debido a que el campo 'Contraseña' fue eliminado por mysql y reemplazado por autenticación_cadena. Nota: que la función CONTRASEÑA de mysql ('contraseña') se basa en el algoritmo MD5 que fue descifrado hace mucho tiempo usando el ataque del día del nacimiento. Por lo tanto, usarlo da una falsa sensación de seguridad porque un atacante puede simplemente pegar los hash que produce en un sitio web público como hashkiller.co.uk/md5-decrypter.aspx y recuperar su contraseña de texto sin formato.
Dr. Deo

Respuestas:

556

En MySQL 5.7, se eliminó el campo de contraseña en el campo de tabla mysql.user, ahora el nombre del campo es 'autenticación_cadena'.

Primero elija la base de datos:

mysql>use mysql;

Y luego muestra las tablas:

mysql>show tables;

Encontrará la tabla de usuario, ahora veamos sus campos:

mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(16)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)

Sorpresa! No hay campo llamado 'contraseña', el campo contraseña se llama 'autenticación_cadena'. Entonces, solo haz esto:

update user set authentication_string=password('1111') where user='root';

Ahora todo estará bien.

En comparación con MySQL 5.6, los cambios son bastante amplios: Novedades en MySQL 5.7

nodejh
fuente
42
Usted señor me hizo el día.
Bisonfan95
3
Este método funciona incluso con la restricción --skip-grant-tables al iniciar mysqld. Dado que usted es un usuario anónimo, no puede cambiar las contraseñas con: ALTER USER 'root' @ 'localhost' IDENTIFICADO POR 'new-password' ALTER USER 'root' @ '*' IDENTIFIED BY 'new-password' Le dará Tiene un error de permisos de usuario anónimo.
Bisonfan95
¿Qué pasa si no hay mesas en absoluto?
Sahand
1
cambiar el nombre del campo de la contraseña ... una decisión que causó tanta gente tanto problemas ...
talsibony
2
Al restablecer la contraseña de root en el paso 2), también cambie el complemento de autenticación a mysql_native_password: use mysql; update user set authentication_string=PASSWORD("") where User='root'; update user set plugin="mysql_native_password" where User='root'; # THIS LINE flush privileges; quit;
Viswa
26

Este error ocurre si no configuró la contraseña en la instalación, en este caso, mysql utiliza el complemento de socket unix .

Pero si elimina el enlace del complemento de la configuración (tabla mysql.user) habrá otro problema. Esto no soluciona el problema y crea otro problema. Para arreglar el enlace eliminado y establecer la contraseña ("PWD"), haga lo siguiente:

1) Ejecutar con --skip-grant-tableslo dicho anteriormente.

Si no funciona, agregue la cadena skip-grant-tablesen la sección [mysqld]de /etc/mysql/mysql.conf.d/mysqld.cnf. Entonces hazlo sudo service mysql restart.

2) Ejecutar mysql -u root -p, luego (cambiar "PWD"):

update mysql.user 
    set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password" 
    where User='root' and Host='localhost';    
flush privileges;

quit

entonces sudo service mysql restart. Comprobar: mysql -u root -p.

Antes de restarteliminar esa cadena del archivo mysqld.cnf, si la configuró allí.

bl79
fuente
¡Correcto! Plugin necesario = "mysql_native_password" y los privilegios de vaciado. No se pudo lograr que esto funcione con ningún otro ejemplo. Gracias bl79!
TheRealWebGuy
ObtengoERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '("MYNEWPASSWORD"), plugin="mysql_native_password"
Chance Smith
tu respuesta es genial! esta es una respuesta que me ayudó durante la pelea de 6 horas
AlexNikonov
plugin = "mysql_native_password" Hecho el truco para mí
Joyner
Funciona perfectamente para mí
Mayank Sharma
23

Un escollo en el que caí es que no hay un campo de contraseña ahora, se le cambió el nombre así:

update user set password=PASSWORD("YOURPASSWORDHERE") where user='root';

Ahora debería ser:

update user set authentication_string=password('YOURPASSWORDHERE') where user='root';

John C
fuente
16

Use el ALTER USERcomando en lugar de intentar actualizar una USERfila. Tenga en cuenta que puede haber más de un usuario 'root', porque las entidades de usuario también están calificadas por la máquina desde la que se conectan

https://dev.mysql.com/doc/refman/5.7/en/alter-user.html

Por ejemplo.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password' 
ALTER USER 'root'@'*' IDENTIFIED BY 'new-password' 
O. Jones
fuente
2
Para MySQL 5.7.9, tengo que ALTERAR AL USUARIO para que funcione correctamente. Gracias.
shin
hemos necesitado usuario \ g seguido del comando anterior. Usando MySql 5.7.12. ty
bobsouza
esta respuesta solo funcionó para mí, en Ubuntu 16.04, mysql 5.7.19;
A1Gard
¿Cambiaron el comodín de @ a *? Grr ... ahora tengo más preguntas que cuando vine aquí.
pguardiario
4

Solo funcionó conmigo cuando me sonrojé después de los comandos mencionados aquí. Aquí está la lista completa de comandos que utilicé:

Las respuestas anteriores podrían no funcionar para versiones posteriores de mysql. Pruebe estos pasos si las respuestas anteriores no le funcionaron:

1- Haz clic en el icono de wamp> mysql> consola mysql

2- escribe los siguientes comandos, uno por uno

use mysql;
update user set authentication_string=password('your_password') where user='root';
FLUSH PRIVILEGES;
quit
Amgad
fuente
4

Gracias por tu ayuda. En caso de que las personas sigan teniendo problemas, intente esto.

Para MySQL versión 5.6 y menos

¿Has olvidado tu contraseña de "ROOT" de Mac OS X y necesitas restablecerla? Siga estos 4 simples pasos:

  1.  Detenga el servidor mysqld. Normalmente, esto se puede hacer desde 'Preferencias del sistema'> MySQL> 'Detener el servidor MySQL'
  2.  Inicie el servidor en modo seguro con omisión de privilegios desde un terminal:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  En una nueva ventana de terminal:      sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q
  4.  Detenga el servidor mysqld nuevamente y reinícielo en modo normal.

Para MySQL versión 5.7 y superior

  1.  Detenga el servidor mysqld. Por lo general, esto puede hacerse desde 'System Prefrences' > MySQL > 'Stop MySQL Server'
  2.  Inicie el servidor en modo seguro con omisión de privilegios desde un terminal:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  En una nueva ventana de terminal:            sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q      
  4.  Detenga el servidor mysqld nuevamente y reinícielo en modo normal.
eli
fuente
Esto me ayudó al instalar mysql <5.7
Ankit Agarwal
3

Para este problema, utilicé un método simple y grosero, cambie el nombre del campo a contraseña, la razón de esto es que utilizo el software mac navicat premium en el error de operación visual: columna desconocida 'contraseña' en 'lista de campos', el el software en sí usa contraseña para que no pueda operar fácilmente. Por lo tanto, rooteo en la línea de comando de la base de datos, ejecuto

Use mysql;

Y luego modifique el nombre del campo:

ALTER TABLE user CHANGE authentication_string password text;

Después de todo lo normal.

luyishisi
fuente
0

Causa raíz: la raíz no tiene contraseña, y su declaración de conexión de Python debería reflejar eso.

Para resolver el error 1698, cambie su contraseña de conexión de Python a ''.

nota: actualizar manualmente la contraseña del usuario no resolverá el problema, aún obtendrá el error 1698

Jameskchau
fuente
0

recuerda que la contraseña debe configurarse aún más después de reiniciar mysql como se muestra a continuación

SET PASSWORD = PASSWORD('root');
Pravin
fuente