web-dev-qa-db-fra.com

java.sql.SQLException: accès refusé pour l'utilisateur 'root' @ 'localhost' (avec mot de passe: YES)

Le code suivant:

Class.forName("com.mysql.jdbc.Driver");
Connection m_connection = DriverManager.getConnection("jdbc:mysql://localhost","root","root");

Lance cette exception sur getConnection():

Java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:4074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:4006)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:919)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.Java:1694)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.Java:1244)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.Java:2397)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.Java:2430)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2215)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.Java:813)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.Java:47)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at Java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.Java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.Java:399)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:334)
    at Java.sql.DriverManager.getConnection(Unknown Source)
    at Java.sql.DriverManager.getConnection(Unknown Source)
    at db.Database.<init>(Database.Java:91)
    at db.Main.main(Main.Java:10)

Comment cela est-il causé et comment puis-je le résoudre?

MODIFIER:

    public static void main(String[] args) throws ClassNotFoundException, ServletException, SQLException 
    {

        try
        {
            Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword"); 
            Statement   s = (Statement) conn.createStatement();
            int result = s.executeUpdate("CREATE DATABASE databasename");
        }


        catch ( Exception e)
        {
            e.printStackTrace();
        }
}

Produit:

Java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:4074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:4006)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:919)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.Java:1694)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.Java:1244)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.Java:2397)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.Java:2430)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2215)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.Java:813)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.Java:47)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at Java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.Java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.Java:399)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:334)
    at Java.sql.DriverManager.getConnection(Unknown Source)
    at Java.sql.DriverManager.getConnection(Unknown Source)
    at db.Main.main(Main.Java:19)
34
ron

Comme vous créez une base de données à partir de zéro, vous pouvez utiliser:

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword"); 
PreparedStatement ps = connection.prepareStatement("CREATE DATABASE databasename");
int result = ps.executeUpdate();

Voici un scénario identique .

10
Reimeus

Cela peut vous aider:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION;

Exécutez-le avec la ligne de commande ou un outil graphique.

N'oubliez pas de remplacer %password% par un mot de passe réel.

43
evg

J'avais un problème similaire, mais la différence était la suivante: je n’ai pas exécuté ma JavaApp à partir de localhost, mais à partir d’un PC distant. Donc, j'ai quelque chose comme Java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES)Pour résoudre ceci, vous pouvez simplement vous connecter à phpMyAdmin, allez à Users, cliquez sur add user et entrez l'hôte à partir duquel vous voulez exécuter votre JavaApp (ou choisissez Any Host)

6
Munchkin

tu peux utiliser ça 

   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/YOUR_DB_NAME";


   static final String USER = "root";
   static final String PASS = "YOUR_ROOT_PASSWORD"; 

  Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);

vous devez donner le bon mot de passe root.

5
SR230

Ceci est spécifique à Ubuntu 18.04 LTS et MySQL 5.x Suivait ce link Suivez tout à partir de maintenant:

Sudo mysql_secure_installation

Sudo mysql

Une fois connecté à MySQL, exécutez les commandes suivantes à partir de l'invite MySQL:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;

Maintenant, vérifiez que la table a le mot de passe pour la racine

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

Cela a résolu mon problème et maintenant je peux me connecter.

2
Ashu

Vous devez spécifier la base de données à laquelle vous vous connectez:

jdbc:mysql://localhost:3306/mydb
2
evg

J'ai eu le même problème "Java.sql.SQLException: Accès refusé pour l'utilisateur 'root' @ 'localhost' (avec le mot de passe: YES)". Le problème était "MOT DE PASSE ERRONÉ". Copiez et collez la requête telle quelle dans le shell pour vérifier si elle fournit ou non le résultat souhaité. Les petites erreurs consomment plus de temps.

2
Pratyush Raunak

Cette exception est également due à une incompatibilité de version entre mysql db et votre pom.xml/jar.

Assurez-vous que votre version de pom.xml/jar est supérieure à votre version de mysql db . Les versions supérieures étant compatibles avec les versions inférieures, il n'en va pas de même pour l'inverse. 

Solution pour projet Java

  • Remplacez le récipient par une version appropriée.

Solution pour maven

  • Changer la version de dépendance dans pom.xml

Solution pour démarrage à ressort - Remplacez la dépendance de démarrage de printemps en ajoutant 5.1.5.Final

1
Gani

Bien que cela ne soit peut-être pas la cause de votre problème, vous obtiendrez la même erreur si deux services MySQL s'exécutent sur le même port. Vous pouvez vérifier les fenêtres en consultant la liste des services dans l'onglet Services du Gestionnaire de tâches.

1
dave

Je frappais le même problème. Ajout du numéro de port du service mysql (3307), résolution du problème.

conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/?" + "user=root&password=password");
1
Satish Hunasikatti

Essayez comme ça ....

public static Connection getConnection() throws SQLException{

    String driver = "com.mysql.jdbc.Driver";
    String url    = "jdbc:mysql://localhost:3306/test";
    String username = "root";
    String password = "vicky";            // Change it to your Password
    System.setProperty(driver,"");

    return DriverManager.getConnection(url,username,password);
}
1
Kumar Vivek Mitra

Cela semble se produire principalement lorsque le nom d'utilisateur et le mot de passe MySQL sont incorrects. Vérifiez votre nom d'utilisateur et votre mot de passe MySQL.

0

Si vous connectez un serveur mysql distant à partir de votre machine locale à l'aide de Java, reportez-vous aux étapes ci-dessous. : OUI) "

cpanel pour l'accès à distance peut être ou d'autres accordent l'accès à distance pour votre adresse IP locale.

Dans le message d'erreur ci-dessus: "101.123.163.141" est l'adresse IP de mon ordinateur local. Nous devons donc d'abord donner un accès distant dans Cpanel-> Remote MySQL®. Ensuite, lancez votre application pour vous connecter.

Class.forName("com.mysql.jdbc.Driver");  
Connection con=DriverManager.getConnection(  
    "jdbc:mysql://www.xyz.com/abc","def","ghi");  
//here abc is database name, def is username and ghi        
Statement stmt=con.createStatement();  
ResultSet rs=stmt.executeQuery("select * from employee");  
    while(rs.next())  
        System.out.println(rs.getInt(1)+" "+rs.getString(2)+"  
                          "+rs.getString(3));  
con.close();    

J'espère que cela résoudra votre problème.

Merci

0
S Debasish Nayak

J'ai dû modifier ma configuration SQL (dans mon hôte, Dreamhost dans mon cas) pour permettre au nom d'utilisateur d'accéder à la base de données depuis d'autres hôtes, pas seulement Dreamhost, car j'exécute un programme à partir de IDE sur mon ordinateur. Je l'ai fait pour l'instant en ajoutant% à la liste des hôtes autorisés. Cela fonctionne maintenant! 

0
Chris Appleby