Comment changer le mot de passe 'root' de MySQL en utilisant MySQL v5.7?

14

Environnement actuel:

mysql> show variables like "%version%";
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.7.13                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| tls_version             | TLSv1,TLSv1.1                |
| version                 | 5.7.13                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+
8 rows in set (0.01 sec)

Utilisateur de la commande de changement de mot de passe:

mysql> update user set password=PASSWORD("XXXX") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'

Suis-je en train de manquer quelque chose?

Shivu RH
la source
essayez de démarrer mysqlen mode sans échec. alors vous pouvez changer le mot de passe root
Mongrel
À tous ceux qui lisent ce fil. MySQL 5.7 a des changements substantiels sous le capot. Veuillez les lire avant la mise à niveau.
Rui F Ribeiro

Réponses:

24

Dans MySQL 5.7, le passwordchamp dans mysql.userle champ table a été supprimé, maintenant le nom du champ est authentication_string.

Choisissez d'abord la base de données:

mysql> use mysql;

Et puis montrez les tableaux:

mysql> show tables;

Vous trouverez le usertableau et voyez ses champs:

mysql> describe user;

Vous vous rendrez compte qu'aucun champ n'est nommé password, le champ du mot de passe est nommé authentication_string. Alors, faites ceci:

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

Comme suggéré par @Rui F Ribeiro, vous pouvez également exécuter:

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');
Rahul
la source
1
+1 pour la référence authentication_string. Je l'ai également récemment découvert après la mise à niveau vers 5.7
Rui F Ribeiro
4
Bien qu'il ne soit pas entièrement dirigé vers cette réponse, une autre alternative pour 5.7 estSET PASSWORD FOR 'root' = PASSWORD('new_password');
Rui F Ribeiro
1
@RuiFRibeiro merci, mis à jour ma réponse
Rahul
1
Rahul Initialement, j'ai édité le fil vers plus tard que 5.7, mais je l'ai ensuite changé en utilisant MySQL 5.7, pour rester plus fidèle à l'esprit de la question. Par exemple, @Shivu ne savait pas que c'était un changement dans 5.7.
Rui F Ribeiro
1
C'est une façon de formuler la question. Nous n'éditons pas les questions et les réponses uniquement au profit du PO, mais aussi pour d'autres plus tard.
Rui F Ribeiro du
2

La manière MySQL de changer le mot de passe est SET PASSWORD

SET PASSWORD FOR 'root' = PASSWORD('new_password');

voir MySQL 5.7 Reference Manual / ... / SET PASSWORD Syntax

L'instruction SET PASSWORD attribue un mot de passe à un compte d'utilisateur MySQL, spécifié en tant que valeur en texte clair (non chiffré) ou chiffrée:

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

La réponse acceptée de Rahul montre comment mettre à jour le mot de passe avec la DMLdéclaration.

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

Attention: ce n'est pas la voie officielle et prise en charge. Cela peut causer des problèmes si vous ne savez pas ce que vous faites. N'oublie pas FLUSH PRIVILEGES.

Pour la plupart des opérations, comme la création d'un utilisateur, la modification de ses privilèges ou la modification de son mot de passe, vous souhaiterez utiliser les instructions de haut niveau. Non seulement ils sont plus faciles à utiliser et ils sont compatibles avec un plus grand nombre de versions de MySQL, mais ils vous empêcheront également de faire des erreurs (bien sûr, n'oubliez pas de configurer le mode sql "NO_AUTO_CREATE_USER"). Ils fonctionnent même généralement bien dans un environnement hostile à MyISAM comme un cluster Galera.

Arrêtez d'utiliser FLUSH PRIVILEGES

S'il vous plaît utiliser GRANT, REVOKE, SET PASSWORDou RENAME USERet non des déclarations DML directes.

Mise à jour: SET PASSWORD ... = La syntaxe PASSWORD ('auth_string') est obsolète à partir de MySQL 5.7.6 et sera supprimée dans une future version de MySQL.

Ivanov
la source
1

mysqladmin -u user-name password -p "oldpassword" "newpass"

si vous pouvez vous connecter, essayez cela ""ne fonctionnera pas, essayez un ''seul devis

update user set password=PASSWORD("newpass") where User='ENTER-USER-NAME-HERE';

Bâtard
la source
Bien que je préfère la réponse mysqladmin, voir la réponse de Rahul. Votre requête SQL est obsolète. J'ai corrigé le mysqladmin, vous manquiez la directive de mot de passe.
Rui F Ribeiro
1
Merci Ribeiro. J'ai ratéauthentication_string
Mongrel
0

Dans mon cas

mysql.server start
$ mysql -uroot
mysql> update user set authentication_string=password('123456') where User='root';
mysql> exit;
mysql.server restart (if you not restart , connection will not work.)

Je pense donc que votre commande de mise à jour est correcte, mais vous devez redémarrer votre serveur mysql.

Jack LI
la source
-1

Pour ce problème, j'ai utilisé une méthode simple et grossière, renommer le nom de 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 'mot de passe' dans 'Liste des champs', le le logiciel lui-même utilise un mot de passe pour que je ne puisse pas fonctionner facilement. Par conséquent, je racine dans la ligne de commande de base de données, exécutez

Use mysql;

Et puis modifiez le nom du champ:

ALTER TABLE user CHANGE authentication_string password text;

Après tout normal.

luyishisi
la source