188 votes

Accès refusé à l'utilisateur 'Root'@'localhost' (avec mot de passe : YES) - Pas de privilèges ?

Je reçois continuellement cette erreur.

J'utilise mySQL Workbench et ce que je constate, c'est que les privilèges de schéma de Root sont nuls. Il n'y a pas de privilèges du tout.

J'ai des problèmes avec les différentes plateformes pour lesquelles mon serveur est utilisé et ce problème est apparu soudainement.

Root@127.0.0.1 a apparemment beaucoup d'accès mais je suis connecté en tant que tel, mais il attribue simplement à localhost de toute façon - localhost n'a aucun privilège.

J'ai fait des choses comme FLUSH HOSTS , FLUSH PRIVILEGES etc. mais je n'ai rien trouvé de concluant dans ce domaine ou sur Internet.

Comment puis-je récupérer l'accès à Root ? Je trouve cela frustrant parce que lorsque je regarde autour de moi, les gens s'attendent à ce que vous ayez "un accès" mais je n'ai pas d'accès et je ne peux pas aller dans la ligne de commande ou quoi que ce soit et GRANT moi-même n'importe quoi.

En cours d'exécution SHOW GRANTS FOR root c'est ce que je reçois en retour :

Code d'erreur : 1141. Il n'y a pas de subvention définie pour l'utilisateur 'Root' sur l'hôte '%'.

0voto

Alex Tsurika Points 69

J'ai résolu le même problème en utilisant next sql 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';

0voto

Veera Prasad Points 161

J'ai travaillé sur l'accès refusé à l'utilisateur 'Root'@'localhost' (en utilisant le mot de passe : YES) 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

0voto

Jordan Points 109

Je ne pense pas que tu doives échapper à la --init-file paramè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

Ça devrait l'ê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

0voto

Koyel Sharma Points 59

Pour le problème ci-dessus votre mot de passe dans le système devrait correspondre au mot de passe que vous avez passé dans le programme parce que quand vous exécutez le programme il vérifie le mot de passe du système comme vous avez donné Root comme un utilisateur donc 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 comme jacob234 et ensuite exécutez le code.

0voto

xpress Points 11

J'ai eu le même problème, mais il a été causé par le fait que j'utilisais le serveur mysql sur 32 (bit) et que le banc d'essai fonctionnait sur une version 64 (bit). Le serveur et le banc d'essai doivent avoir la même version.

xpress

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X