web-dev-qa-db-fra.com

Accès refusé pour l'utilisateur 'root' @ 'localhost' (avec le mot de passe: YES) (Mysql :: Error)

J'ai essayé de déployer une application Web sur mon serveur et j'obtiens cette exception de base de données mysql "Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: YES) (Mysql :: Error)" 

J'ai essayé d'accéder à la base de données à partir de la commande Invite à l'aide de mysql -u root -p. Je suis capable de faire toutes les opérations de base de données. 

quelle est l'erreur 

Java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:2928)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:771)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.Java:3649)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.Java:1176)
    at com.mysql.jdbc.Connection.createNewIO(Connection.Java:2558)
    at com.mysql.jdbc.Connection.<init>(Connection.Java:1485)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:266)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:620)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:200)
    at com.mpigeon.DbConnection.DbConn(DbConnection.Java:26)
    at com.mpigeon.CheckLoginHome.doGet(CheckLoginHome.Java:39)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:717)
30
Jeevan Dongre

Vous devez accorder l'accès à root à partir de localhost. Vérifiez this ubuntu help

22
Jigar Joshi

essayez d'utiliser root comme ..

mysql -uroot

alors vous pouvez vérifier différents utilisateurs et hôtes après vous être connecté en utilisant

select user,Host,password from mysql.user;
8
Vivek Buddhadev

vérifiez que vous mettez un espace vide dans le mot de passe.

6
KhAn SaAb

J'ai rencontré la même erreur après avoir mis à niveau le serveur MySQL de 5.1.73 à 5.5.45 Il existe un autre moyen de corriger cette erreur.

Dans mon cas, j’ai été capable de me connecter à MySQL avec un mot de passe root, mais MySQL a activement refusé de DONNER PRIVÉ à tout utilisateur;

  1. Se connecter à MySQL en tant que root

    mysql -u root -p
    

    puis entrez votre mot de passe root MySQL;

  2. Sélectionnez la base de données.

    use mysql;
    
  3. Dans la table mysql.user, il n'y a probablement qu'un seul enregistrement pour root permettant de se connecter uniquement à partir de localhost (c'était dans mon cas), mais par défaut, il devrait y avoir deux enregistrements pour root, un pour localhost et un autre pour 127.0.0.1

  4. Créez un enregistrement supplémentaire pour l'utilisateur root avec Host='127.0.0.1' s'il n'est pas là;

        SET @s = CONCAT('INSERT INTO mysql.user SELECT ',
                REPLACE((SELECT GROUP_CONCAT(COLUMN_NAME) 
                         FROM INFORMATION_SCHEMA.COLUMNS
                         WHERE TABLE_NAME = 'user' AND TABLE_SCHEMA = 'mysql')
                ,"Host","'127.0.0.1'"),
                ' FROM mysql.user WHERE User="root"'); 
    
         PREPARE stmt FROM @s; 
         EXECUTE stmt;
    
  5. De plus, vous pouvez exécuter mysql_upgrade -u -ppour voir si tout va bien.

2
ZeJur

Mon application utilise Mura CMS et j'ai fait face à ce problème. Cependant, la solution a été l'incompatibilité des mots de passe entre mon serveur local mysql et le mot de passe dans les fichiers de configuration. Dès que je les synchronisais, cela fonctionnait.

1
Yoosaf Abdulla

D'après ma réponse ici , j'ai pensé que cela pourrait être utile:

J'ai essayé plusieurs étapes pour résoudre ce problème. Il existe tellement de sources de solutions possibles à ce problème qu'il est difficile de filtrer le sens du non-sens. J'ai enfin trouvé une bonne solution ici :

Étape 1: Identifier la version de la base de données

$ mysql --version

Vous verrez une sortie comme celle-ci avec MySQL:

$ mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

Ou comme ceci pour MariaDB:

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

Notez la base de données et la version que vous utilisez, car vous les utiliserez plus tard. Ensuite, vous devez arrêter la base de données pour pouvoir y accéder manuellement.

Étape 2: arrêt du serveur de base de données

Pour changer le mot de passe root, vous devez au préalable arrêter le serveur de base de données.

Vous pouvez le faire pour MySQL avec:

$ Sudo systemctl stop mysql

Et pour MariaDB avec:

$ Sudo systemctl stop mariadb

Étape 3: redémarrage du serveur de base de données sans vérification des autorisations

Si vous exécutez MySQL et MariaDB sans charger d'informations sur les privilèges de l'utilisateur, cela vous permettra d'accéder à la ligne de commande de la base de données avec les privilèges root sans fournir de mot de passe. Cela vous permettra d'accéder à la base de données sans le savoir.

Pour ce faire, vous devez empêcher la base de données de charger les tables d'attribution, qui stockent les informations de privilège de l'utilisateur. Comme il s’agit là d’un risque pour la sécurité, vous devez également ignorer la mise en réseau afin d’empêcher d’autres clients de se connecter.

Démarrer la base de données sans charger les tables de subventions ni activer la mise en réseau:

$ Sudo mysqld_safe --skip-grant-tables --skip-networking &

L'esperluette à la fin de cette commande fera en sorte que ce processus s'exécute en arrière-plan afin que vous puissiez continuer à utiliser votre terminal.

Vous pouvez maintenant vous connecter à la base de données en tant qu'utilisateur root, ce qui ne devrait pas vous demander de mot de passe.

$ mysql -u root

Vous verrez immédiatement une invite de base de données Shell à la place.

Invite MySQL

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Invite MariaDB

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Maintenant que vous avez un accès root, vous pouvez changer le mot de passe root.

Étape 4: Changer le mot de passe racine

mysql> FLUSH PRIVILEGES;

Nous pouvons maintenant changer le mot de passe root.

Pour MySQL 5.7.6 et versions ultérieures, ainsi que MariaDB 10.1.20 et versions ultérieures, utilisez la commande suivante:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Pour MySQL 5.7.5 et versions antérieures ainsi que MariaDB 10.1.20 et versions antérieures, utilisez:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

Assurez-vous de remplacer new_password par votre nouveau mot de passe.

Remarque: Si la commande ALTER USER ne fonctionne pas, cela indique généralement un problème plus grave. Cependant, vous pouvez essayer UPDATE ... SET pour réinitialiser le mot de passe root à la place.

[IMPORTANT] Ceci est la ligne spécifique qui a résolu mon problème particulier:

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

N'oubliez pas de recharger les tables de subvention après cela.

Dans les deux cas, vous devriez voir la confirmation que la commande a été exécutée avec succès.

Query OK, 0 rows affected (0.00 sec)

Le mot de passe a été modifié. Vous pouvez donc maintenant arrêter l'instance manuelle du serveur de base de données et la redémarrer comme auparavant.

Étape 5: Redémarrez normalement le serveur de base de données

Le tutoriel explique comment redémarrer la base de données, mais le seul élément que j'ai utilisé est le suivant:

Pour MySQL, utilisez: $ Sudo systemctl start mysql

Pour MariaDB, utilisez:

$ Sudo systemctl start mariadb

Vous pouvez maintenant vérifier que le nouveau mot de passe a été appliqué correctement en exécutant:

$ mysql -u root -p

La commande devrait maintenant demander le mot de passe nouvellement attribué. Entrez-le et vous devriez avoir accès à l'invite de la base de données comme prévu.

Conclusion

Vous avez maintenant un accès administratif au serveur MySQL ou MariaDB restauré. Assurez-vous que le nouveau mot de passe root que vous choisissez est fort et sécurisé et conservez-le en lieu sûr.

0
Blairg23

J'ai beaucoup cherché sur Google mais je n'ai pas trouvé de réponse définitive à mon problème. J'ai utilisé KeyPass pour générer un mot de passe fort et je l’ai utilisé avec succès sur mysql workbench pour me connecter mais pas à partir de la ligne de commande. J'ai donc changé le psw en un facile et cela a fonctionné sur la ligne de commande. J'ai réussi à créer un mot de passe fort capable de se connecter à partir du terminal. Donc, mon conseil est, essayez avec un mot de passe facile avant d’essayer toutes sortes de choses.

0
Rossygnol

J'ai eu ce problème aujourd'hui lors de l'installation de SugarCRM (un CRM gratuit).

Le système n'a pas pu se connecter à la base de données à l'aide de l'utilisateur root. Je pouvais me connecter définitivement en tant que root depuis la console ... alors quel était le problème?

J'ai découvert que dans ma situation, j'avais exactement la même erreur, mais c'était parce que le mot de passe avait été envoyé à mysql directement à partir des données $_POST. En d'autres termes, le caractère < de mon mot de passe avait été envoyé à mysql sous la forme &lt; le mot de passe était faux.

Tout le reste n'a pas aidé un peu. La liste des utilisateurs dans mysql était correcte, y compris l'utilisateur anonyme (qui apparaît après les entrées de la racine).

0
Alexis Wilke

J'utilisais des UT et j'ai commencé à recevoir des messages d'erreur. Je ne sais pas quel était le problème. Mais lorsque j'ai changé mon style de codage dans INTELLIJ en UTF8, il a recommencé à fonctionner.

accès refusé pour l'utilisateur 'root' @ 'localhost' (avec le mot de passe yes) hiberner

c'est mon URL db.url = jdbc: mysql: // localhost: 3306/somedb? useUnicode = true & connectionCollation = utf8_general_ci & characterSetResults = utf8 & characterEncoding = utf8

0
Sandeep M

J'ai résolu ce problème en supprimant les utilisateurs vides créés par MySQL. Je n'ai que l'utilisateur root et mon propre utilisateur. J'ai supprimé le reste.

0
jjmartinez

Mettez à jour la table user dans la base de données mysql. Et définir un mot de passe où il est vide, j'utilisais l'utilisateur root donc j'ai défini le mot de passe pour l'utilisateur root.

update mysql.user set password = PASSWORD('123456') where password = '';
flush privileges;

Et puis encore une fois essayé d'ATG CIM en fournissant un mot de passe et cela a bien fonctionné.

After update

http://i.stack.imgur.com/3Lchp.png

0
Mohit