Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: OUI) - Pas de privilèges?

111

Je reçois continuellement cette erreur.

J'utilise mySQL Workbench et d'après ce que je trouve, les privilèges de schéma de root sont nuls. Il n'y a aucun privilège.

J'ai des problèmes sur les plates-formes pour lesquelles mon serveur est utilisé et cela a été tout à coup un problème.

[email protected] a apparemment beaucoup d'accès mais je suis connecté comme ça, mais il est simplement assigné à localhost de toute façon - localhost n'a pas de privilèges.

Je l' ai fait quelques choses comme FLUSH HOSTS, FLUSH PRIVILEGES, etc , mais ai trouvé aucun succès de cette entreprise ou Internet.

Comment puis-je récupérer son accès root? Je trouve cela frustrant parce que quand je regarde autour de moi, les gens s'attendent à ce que vous "ayez accès" mais je n'y ai pas accès donc je ne peux pas entrer en ligne de commande ou quoi GRANTque ce soit et moi - même quoi que ce soit.

Lors de l'exécution, voici SHOW GRANTS FOR rootce que j'obtiens en retour:

Code d'erreur: 1141. Aucune autorisation de ce type n'est définie pour l'utilisateur «root» sur l'hôte «%»

Chasse
la source
Exécutez SHOW GRANTS FOR rootune requête, publiez le résultat dans votre question.
NobleUplift
Vous essayez d'accéder à la base de données depuis l'hôte local ou depuis un autre hôte en utilisant MySQL Workbench?
Andy Jones
redémarrez le serveur avec --skip-grant-table et connectez-vous avec n'importe quel utilisateur et fournissez les privilèges complets pour rooter et redémarrer le serveur à nouveau sans l'option ci-dessus
vidyadhar
@AndyJones non, c'est sur un serveur dédié que j'utilise.
Chase le
@vidyadhar Je suis désolé, je ne sais pas où je ferais ça?
Chase le

Réponses:

52

Utilisez les instructions pour réinitialiser le mot de passe root - mais au lieu de réinitialiser le mot de passe root, nous allons insérer de force un enregistrement dans la table mysql.user

Dans le fichier init, utilisez plutôt ceci

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
Andy Jones
la source
1
Je suis désolé Andy, mais quand j'arrive à l'étape 6, je continue de rencontrer un problème. Depuis que j'ai utilisé un assistant d'installation, j'utiliserais "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt Tout est là où il est censé être et ce que vous avez ci-dessus, j'ai mis le fichier en conséquence. J'ai également arrêté le service. Je viens de recevoir cette sortie: prntscr.com/1ilxau Et tout (plugins) arrêt. Vraiment déroutant.
Chase le
2
exécutez-vous cela en tant qu'administrateur?
Andy Jones
1
À ma stupidité surprise, je ne l'étais pas. Après cela, j'ai eu ce prntscr.com/1imcnj - La première fois que je l'ai fait sur leurs propres lignes (à partir de la pâte), j'ai tout mis sur une seule ligne. Je suis désolé que ce soit tellement déroutant pour moi, pas pour l'expert SQL en soi.
Chase le
16
ça donne: ERROR 1054 (42S22): Unknown column 'Password' in 'field list'erreur. @AndyJones
alper
1
Je reçois: Colonne inconnue 'Mot de passe' dans 'Liste des champs'
sricheta ruj
130

Si vous rencontrez le même problème dans MySql 5.7. +:

Access denied for user 'root'@'localhost'

c'est parce que MySql 5.7 par défaut permet de se connecter avec socket, ce qui signifie que vous venez de vous connecter avec sudo mysql. Si vous exécutez sql:

SELECT user,authentication_string,plugin,host FROM mysql.user;

alors vous le verrez:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Pour autoriser la connexion avec root et mot de passe, mettez à jour les valeurs dans le tableau avec la commande:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Current-Root-Password';
FLUSH PRIVILEGES;

Ensuite, exécutez à nouveau la commande de sélection et vous verrez qu'elle a changé:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *2F2377C1BC54BE827DC8A4EE051CBD57490FB8C6 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Et c'est tout. Vous pouvez exécuter ce processus après avoir exécuté et terminé la sudo mysql_secure_installationcommande.

Pour mariadb, utilisez

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('manager');

pour définir le mot de passe. Plus d'informations sur https://mariadb.com/kb/en/set-password/

KeitelDOG
la source
1
Vraiment merci pendant la connexion Établissement à linux mint
Lova Chittumuri
La mise à jour de auth_socketà a mysql_native_passwordrésolu mon problème. Je vous remercie!
olore
1
C'était absolument exaspérant d'essayer de comprendre et une énorme perte de temps. J'aurais aimé qu'ils le demandent pendant mysql_secure_installation. Merci beaucoup pour cette réponse.
PatPeter
cela a également été utile stackoverflow.com/questions/2995054/…
Abeer Sul
42

Il n'aimait pas mon privilège d'utilisateur alors je l'ai SUDO. (dans bash << sudo définir l'utilisateur et le mot de passe) (cela donne le nom d'utilisateur de root et définit le mot de passe sur rien) (sur Mac)

sudo mysql -uroot -p
Dan Kaiser
la source
27

Essayez les commandes suivantes

~$ sudo /etc/init.d/mysql stop
~$ sudo mysqld_safe --skip-grant-tables &
~$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

mysql> use mysql;

mysql> update user set password=PASSWORD("root") where User='root';

mysql> flush privileges;

mysql> quit

~$ sudo /etc/init.d/mysql stop

Stopping MySQL database server: mysqld

STOPPING server from pid file /var/run/mysqld/mysqld.pid

mysqld_safe[6186]: ended

[1]+  Done                    mysqld_safe --skip-grant-tables

~$ sudo /etc/init.d/mysql start

~$ mysql -u root -p

* MySQL Community Server 5.6.35 is started
~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> 
aashish
la source
11
Dans MySQL 5.7, le champ de mot de passe dans le champ de la table mysql.user a été supprimé, maintenant le nom du champ est 'authentication_string'.
Rumid
pour la version plus récente de mysql, ils ont changé le nom de la colonne de mot de passe comme authentication_string
Ramesh Maharjan
sudo mysqld_safem'a obtenu ceci /var/run/mysqld for UNIX socket file don't exists, puis après mkdir -p /var/run/mysqldet sudo chown -R mysql:mysql /var/run/mysqld/cela a fonctionné et a démarré le démon.
kenzotenma
1
ERREUR 2002 (HY000): impossible de se connecter au serveur MySQL local via le socket '/var/run/mysqld/mysqld.so
Mostafa
19

pour les personnes confrontées à l'erreur ci-dessous dans la version mysql 5.7+ -

Access denied for user 'root'@'localhost' (using password: YES)
  1. Ouvrir un nouveau terminal

  2. sudo /etc/init.d/mysql stop ... MySQL Community Server 5.7.8-rc est arrêté

  3. sudo mysqld_safe --skip-grant-tables & cela sautera tous les privilèges de niveau d'octroi et démarrera mysql en mode sans échec Parfois, le processus est resté bloqué juste à cause de

grep: erreur d'écriture: tuyau cassé 180102 11:32:28 mysqld_safe Journalisation dans '/var/log/mysql/error.log'.

Appuyez simplement sur Ctrl + Z ou Ctrl + C pour interrompre et quitter le processus

  1. mysql -u root

Bienvenue sur le moniteur MySQL. Les commandes se terminent par; ou \ g. Votre identifiant de connexion MySQL est la version 2 du serveur: 5.7.8-rc MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle et / ou ses affiliés. Tous les droits sont réservés.

Oracle est une marque déposée d'Oracle Corporation et / ou de ses filiales. Les autres noms peuvent être des marques de commerce de leurs propriétaires respectifs.

Tapez 'help;' ou '\ h' pour obtenir de l'aide. Tapez '\ c' pour effacer l'instruction d'entrée actuelle.

  1. mysql> use mysql;

Lecture des informations de table pour compléter les noms de table et de colonne Vous pouvez désactiver cette fonction pour obtenir un démarrage plus rapide avec -A

Base de données modifiée

  1. mysql> update user set authentication_string=password('password') where user='root'; Requête OK, 4 lignes affectées, 1 avertissement (0,03 sec) Lignes correspondantes: 4 Changé: 4 Avertissements: 1

  2. mysql> flush privileges; Requête OK, 0 ligne affectée (0,00 sec)

  3. mysql> Au quit revoir

  4. sudo /etc/init.d/mysql stop

..180102 11:37:12 mysqld_safe mysqld du fichier pid /var/run/mysqld/mysqld.pid s'est terminé. * MySQL Community Server 5.7.8-rc est arrêté arif @ ubuntu: ~ $ sudo /etc/init.d/mysql start .. * MySQL Community Server 5.7.8-rc est démarré

  1. mysql -u root -p

    Entrer le mot de passe:

    Bienvenue sur le moniteur MySQL. Les commandes se terminent par; ou \ g. Votre identifiant de connexion MySQL est la version 2 du serveur: 5.7.8-rc MySQL Community Server (GPL)

après la version mysql 5.7+, le mot de passe de la colonne a été remplacé par le nom authentication_string de la table mysql.user.

espérons que ces étapes aideront n'importe qui, merci.

ArifMustafa
la source
15

J'utilisais ubuntu 18 et j'ai simplement installé MySQL (mot de passe: root) avec les commandes suivantes.

sudo apt install mysql-server
sudo mysql_secure_installation

Lorsque j'ai essayé de me connecter avec l'utilisateur normal d'ubuntu, cela me posait ce problème.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Mais j'ai pu me connecter à MySQL via le super utilisateur. En utilisant les commandes suivantes, j'ai pu me connecter via un utilisateur normal.

sudo mysql    
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
exit;

Ensuite, vous devriez pouvoir vous connecter à Mysql avec le compte normal.

entrez la description de l'image ici

Nirojan Selvanathan
la source
8

Un moyen simple de réinitialiser le mot de passe root sur les systèmes Linux:

sudo dpkg-reconfigure mysql-server-5.5

Consultez d'autres raisons pour lesquelles l'accès est refusé:

https://dev.mysql.com/doc/refman/5.7/en/problems-connecting.html

Parth mehta
la source
1
trouvez votre version avec "Locate mysql-server", et exécutez la commande en conséquence
Punnerud
5

Si vous obtenez cette erreur dans Workbench mais que vous pouvez vous connecter à partir du terminal, suivez ces étapes.

Connectez-vous tout d'abord avec votre mot de passe actuel:

sudo mysql -u root -p

Puis changez votre mot de passe car avoir un mot de passe faible donne parfois une erreur.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';

FLUSH PRIVILEGES;

Ensuite, quittez simplement et connectez-vous à nouveau avec votre nouveau mot de passe:

quit

sudo mysql -u root -p

Une fois que vous vous êtes connecté avec succès, tapez la commande:

use mysql;

Il devrait afficher un message comme `` Base de données modifiée '', puis tapez:

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

Après ce type:

UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';

Tapez ensuite:

FLUSH PRIVILEGES;

Puis sortez simplement:

quit

Essayez maintenant de vous connecter avec votre nouveau mot de passe dans votre WORKBENCH. J'espère que cela fonctionnera. Je vous remercie.

Tanmoy Bhowmick
la source
4

J'ai rencontré ce problème lors de l'installation de Testlink sur le serveur Ubuntu, j'ai suivi ces étapes

mysql -u root
use mysql;
update user set password=PASSWORD("root") where User='root';
flush privileges;
quit

Arrêtez maintenant l'instance et recommencez ie

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
Shridhar S Chini
la source
2

Eh bien, le moyen le plus simple de réinitialiser le mot de passe root est:

  • Redémarrez l'option mysqld --skip-grant-tables . Cela permet à quiconque de se connecter sans mot de passe et avec tous les privilèges. Étant donné que cela n'est pas sécurisé, vous pouvez utiliser --skip-grant-tables en conjonction avec --skip-networking pour empêcher les clients distants de se connecter.

  • Connectez-vous au serveur mysqld avec cette commande:

  • shell> mysql Émettez les instructions suivantes dans le client mysql. Remplacez le mot de passe par le mot de passe que vous souhaitez utiliser.

  • mysql> UPDATE mysql.user SET Password = PASSWORD ('MyNewPass') -> WHERE User = 'root'; mysql> FLUSH PRIVILEGES;

  • Arrêtez le serveur, puis redémarrez-le normalement (sans les options --skip-grant-tables et --skip-networking).

Documentation et expérience personnelle Source Mysql:

http://dev.mysql.com/doc/refman/5.6/en/resetting-permissions.html

Aneesh Vijendran
la source
1

J'ai résolu le même problème en exécutant Workbench en tant qu'administrateur.

... Je suppose que c'est à cause des restrictions sur les ordinateurs de l'entreprise, dans mon cas ...

Igor Šćepanović
la source
0

Essayez les étapes suivantes pour résoudre ce problème:

  1. Ouvrez le terminal / l'invite de commande et accédez au dossier bin du dossier d'installation MySQL. Exécutez ensuite la commande mysqld --console.
  2. Si vous voyez que la ligne 171010 14:58:22 [Note] --secure-file-privest définie sur NULL. Les opérations liées à l'importation et à l'exportation de données sont désactivées après l'exécution de la commande ci-dessus à partir de l'invite de commande.
  3. Ensuite, vous devez vérifier que le mysqldest bloqué par le pare-feu Windows ou par un autre programme.
  4. S'il est bloqué par le pare-feu Windows, vous devez le débloquer et enregistrer les paramètres.
  5. Pour débloquer l' application mysqldou mysql, suivez les étapes ci-dessous:
    1. Accédez à l'invite de commande et tapez wf.mscpour ouvrir les paramètres du pare-feu.
    2. Cliquez sur Autoriser une application ou une fonctionnalité via le pare-feu Windows.
    3. Vérifiez que les instances mysqldou mysqldsont disponibles dans la liste et cochez la case du domaine, public et privé, puis enregistrez les paramètres.
  6. Revenez au dossier bin et réessayez la commande de l'étape 1.
  7. Cela devrait fonctionner correctement et ne montrer aucune erreur.

Il devrait être possible d'exécuter la console MySQL sans aucun problème maintenant!

srinivas krithvik
la source
0

J'ai résolu le même problème en utilisant SQL suivant et en redémarrant le serveur MySQL:

update mysql.user set Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y',Create_tablespace_priv='Y'
where user='root';
Oleksandr Tsurika
la source
0

J'ai travaillé sur Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: OUI) pendant plusieurs heures, j'ai trouvé la solution suivante,

The answer to this problem was that in the my.cnf located within
/etc/mysql/my.cnf

the line was either 
bind-address = 127.0.0.1 
            (or)
bind-address = localhost
            (or)
bind-address = 0.0.0.0

I should prefer that 127.0.0.1

I should also prefer 0.0.0.0, it is more flexible 
because which will allow all connections
Veera Prasad
la source
0

Je ne pense pas que vous deviez échapper au --init-fileparamètre:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt

Devrait être:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\mysql-init.txt

Jordan
la source
0

pour le problème ci-dessus, votre mot de passe dans le système doit correspondre au mot de passe que vous avez passé dans le programme car lorsque vous exécutez le programme, il vérifie le mot de passe du système car vous avez donné root en tant qu'utilisateur, ce qui vous donne une erreur et en même temps l'enregistrement n'est pas supprimé de la base de données.

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
class Delete
{
    public static void main(String []k)
    {
        String url="jdbc:mysql://localhost:3306/student";

        String user="root";
        String pass="jacob234";
        try
        {
            Connection myConnection=DriverManager.getConnection(url,user,pass);
            Statement myStatement=myConnection.createStatement();
            String deleteQuery="delete from students where id=2";
            myStatement.executeUpdate(deleteQuery);
            System.out.println("delete completed");
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

Gardez votre mot de passe système en tant que jacob234, puis exécutez le code.

Koyel Sharma
la source
0

Avec moi, c'était le même problème, mais il était causé, car j'utilisais le serveur mysql sur 32 (bit) et le plan de travail fonctionnait sur la version 64 (bit). le serveur et le plan de travail doivent avoir la même version.

xpress

xpress
la source
0

Pour moi, j'utilisais MYSQLWorkbench et le port était 3306 MAMP en utilisant 8889

Abdullah Tahan
la source
0

J'étais confronté au même problème lorsque j'essayais de connecter la base de données Mysql à l'aide de l'application Laravel. Je voudrais recommander s'il vous plaît vérifier le mot de passe de l'utilisateur. Le mot de passe MySQL ne doit pas avoir de caractères spéciaux comme # , & , etc ...

Mohit Ramani
la source
Sur bluehost, la suppression des caractères spéciaux du mot de passe a en fait résolu le problème.
Mena le