web-dev-qa-db-fra.com

La base de données utilisateur MySQL n'a pas de colonne mot de passe - Installer MySQL sur OSX

J'essaie de changer le mot de passe root MySql.

Ce que j'ai fait est ci-dessous.

  1. Installez MySql-5.7.6 ~ .dmg (Community Server) et le plan de travail.
  2. Désactivez le serveur dans les préférences système OSX.
  3. Accédez à MySql avec la console. La commande était mysqld_safe --skip-grant
  4. Exécutez update user set password=password('1111') where user='root'; et vous recevez un message d'erreur -> ERROR 1054 (42S22): Unknown column 'password' in 'field list'.

Pour votre information, j'ai use mysql;. J'ai donc sélectionné la requête sur la table utilisateur et trouvé que la colonne mot de passe n'existe pas. 

C'est très bizarre. Est-il possible que la table utilisateur d'origine n'ait pas de colonne mot de passe?

Comment puis-je changer le mot de passe, qui n'existe pas?

Merci pour votre réponse: D

134
Juneyoung Oh

Dans MySQL 5.7, le champ mot de passe de la table mysql.user a été supprimé. Le nom du champ est maintenant 'authentication_string'. 

Choisissez d'abord la base de données: 

mysql>use mysql;

Et puis montrez les tables: 

mysql>show tables;

Vous trouverez la table utilisateur, voyons maintenant ses champs:

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)

Surprise! Il n'y a pas de champ nommé 'mot de passe', le champ de mot de passe s'appelle 'authentication_string'. Alors, faites ceci:

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

Maintenant, tout ira bien.

Par rapport à MySQL 5.6, les modifications sont assez importantes: Nouveautés de MySQL 5.7

452
nodejh

Utilisez la commande ALTER USER plutôt que d'essayer de mettre à jour une ligne USER. N'oubliez pas qu'il peut y avoir plus d'un utilisateur 'root' car les entités utilisateur sont également qualifiées par la machine à laquelle elles se connectent.

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

Par exemple.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password' 
ALTER USER 'root'@'*' IDENTIFIED BY 'new-password' 
14
O. Jones

Cette erreur se produit si vous n'avez pas défini le mot de passe lors de l'installation, dans ce cas le mysql utilisant le plugin unix-socket

Mais si supprimer le lien de plugin de paramètres (table mysql.user) sera un autre problème. Cela ne résout pas le problème et crée un autre problème. Pour réparer le lien supprimé et définir le mot de passe ("PWD"), procédez comme suit:

1) Exécutez avec --skip-grant-tables comme indiqué ci-dessus. 

Si cela ne fonctionne pas, ajoutez la chaîne skip-grant-tables dans la section [mysqld] de /etc/mysql/mysql.conf.d/mysqld.cnf. Ensuite, faites Sudo service mysql restart.

2) Exécutez mysql -u root -p, puis (changez "PWD"):

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

quit

alors Sudo service mysql restart. Vérifier: mysql -u root -p.

Avant restart, supprimez cette chaîne du fichier mysqld.cnf, si vous la définissez ici.

11
bl79

Merci de votre aide. Juste au cas où les gens ont toujours des problèmes, essayez ceci. 

Pour MySQL version 5.6 et inférieure

Vous avez oublié votre mot de passe 'ROOT' pour Mac OS X et vous devez le réinitialiser? Suivez ces 4 étapes simples:

  1.  Arrêtez le serveur mysqld. En règle générale, vous pouvez utiliser "Préférences Système"> MySQL> "Arrêter le serveur MySQL"
  2.  Démarrez le serveur en mode sans échec avec contournement des privilèges Depuis un terminal: Sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  Dans une nouvelle fenêtre de terminal:      Sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q
  4.  Arrêtez à nouveau le serveur mysqld et redémarrez-le en mode normal.

Pour MySQL version 5.7 et supérieure

  1.  Arrêtez le serveur mysqld. En règle générale, cela peut être fait à partir de 'System Prefrences' > MySQL > 'Stop MySQL Server'
  2.  Démarrez le serveur en mode sans échec avec contournement des privilèges Depuis un terminal: Sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  Dans une nouvelle fenêtre 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.  Arrêtez à nouveau le serveur mysqld et redémarrez-le en mode normal.
4
eli

Cela ne fonctionnait avec moi que lorsque je "vidais" après les commandes mentionnées ici. Voici la liste complète des commandes que j'ai utilisées: 

Les réponses précédentes pourraient ne pas fonctionner pour les versions ultérieures de mysql. Essayez ces étapes si les réponses précédentes ne vous ont pas aidé:

1- Cliquez sur l'icône wamp> mysql> mysql console

2- écrire les commandes suivantes, une par une

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

Pour ce problème, j’ai utilisé une méthode simple et grossière, renommer le nom du champ en mot de passe. La raison en est que j’utilise le logiciel mac navicat premium dans l’erreur de fonctionnement visuel: colonne inconnue le logiciel lui-même utilise un mot de passe pour que je ne puisse pas facilement utiliser . Par conséquent, je suis en ligne de commande dans la base de données, puis

Use mysql;

Et puis modifiez le nom du champ:

ALTER TABLE user CHANGE authentication_string password text;

Après tout normal.

2
luyishisi

rappelez-vous que le mot de passe doit être défini même après le redémarrage de mysql

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

Cause racine: root ne possède pas de mot de passe et votre déclaration python connect devrait en tenir compte. 

Pour résoudre l'erreur 1698, remplacez le mot de passe de votre connexion python par ''.

remarque: la mise à jour manuelle du mot de passe de l'utilisateur ne résoudra pas le problème, mais bien toujours avoir l'erreur 1698

0
Jameskchau