it-swarm.com.de

java.sql.SQLException: Zugriff für Benutzer 'root' @ 'localhost' verweigert (mit Kennwort: YES)

Der folgende Code:

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

Wirft diese Ausnahme auf 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)

Wie wird das verursacht und wie kann ich es lösen?

BEARBEITEN:

    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();
        }
}

Produziert:

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

Beim Erstellen einer Datenbank von Grund auf können Sie Folgendes verwenden:

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

Hier ist ein identisches Szenario .

10
Reimeus

Dies kann Ihnen helfen:

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

Führen Sie es mit der Befehlszeile oder einem GUI-Tool aus.

Vergessen Sie nicht, %password% durch echtes Passwort zu ersetzen.

43
evg

Ich hatte ein ähnliches Problem, aber der Unterschied war: Ich habe meine JavaApp nicht von localhost ausgeführt, sondern von einem entfernten PC aus. Also habe ich etwas wie Java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES) Um das Problem zu lösen, loggen Sie sich einfach bei phpMyAdmin ein, gehen Sie zu Users, klicken Sie auf add user und geben Sie den Host ein, von dem Sie Ihre JavaApp ausführen möchten (oder wählen Sie Any Host).

6
Munchkin

sie können dies verwenden 

   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);

sie müssen das richtige Root-Passwort angeben.

5
SR230

Dies ist spezifisch für Ubuntu 18.04 LTS und MySQL 5.x Gefolgt von diesem link Folgen Sie ab hier alles:

Sudo mysql_secure_installation

Sudo mysql

Sobald Sie sich bei MySQL angemeldet haben, führen Sie folgende Befehle aus der MySQL-Eingabeaufforderung aus:

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

Vergewissern Sie sich jetzt, dass die Tabelle das Kennwort für das Stammverzeichnis enthält

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

Dies löste mein Problem und jetzt kann ich mich einloggen.

2
Ashu

Sie sollten die Datenbank angeben, zu der Sie eine Verbindung herstellen:

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

Ich hatte das gleiche Problem "Java.sql.SQLException: Zugriff für Benutzer 'root' @ 'localhost' (unter Verwendung des Kennworts: YES) verweigert". Problem war "FALSCHES PASSWORT". Kopieren Sie die Abfrage und fügen Sie sie so wie sie ist in die Shell ein, um zu prüfen, ob sie die gewünschte Ausgabe liefert oder nicht. Kleine Fehler benötigen mehr Zeit.

2
Pratyush Raunak

Diese Ausnahmebedingung wird auch aufgrund von Versionskonflikten zwischen mysql db und pom.xml/jar verursacht.

Vergewissern Sie sich, dass Ihre Version von pom.xml/jar höher ist als die Version von MySQL-Datenbank. Da höhere Versionen mit niedrigeren Versionen kompatibel sind, gilt dies nicht für die Umkehrung. 

Lösung für Java-Projekt

  • Ersetzen Sie das Glas mit einer geeigneten Version.

Lösung für Maven-basierte

  • Ändern Sie die Abhängigkeitsversion in pom.xml

Lösung für Springboot - Überschreiben Sie die Federkernabhängigkeit, indem Sie .__ hinzufügen. 5.1.5.Finale

1
Gani

Obwohl dies möglicherweise nicht die Ursache Ihres Problems ist, erhalten Sie dieselbe Fehlermeldung, wenn zwei MySQL-Dienste auf demselben Port ausgeführt werden. Sie können Windows überprüfen, indem Sie die Liste der Dienste auf der Registerkarte Dienste des Task-Managers anzeigen.

1
dave

Ich traf das gleiche Problem. Mysql-Service-Portnummer (3307) hinzugefügt, das Problem wurde behoben.

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

Probieren Sie es so aus ....

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

Dies geschieht meistens, wenn der MySQL-Benutzername und das Passwort nicht korrekt sind. Überprüfen Sie Ihren MySQL-Benutzernamen und Ihr Passwort.

0

Die Reihenfolge der Deklaration:

  • Driver
  • Verbindungszeichenfolge
  • username
  • passwort

Wenn wir in Ordnung erklären

  • Verbindungszeichenfolge
  • username
  • passwort
  • Driver

die Anwendung schlägt fehl

0
Do Nhu Vy

Wenn Sie einen Remote-MySQL-Server von Ihrem lokalen Computer aus mit Java verbinden, gehen Sie wie folgt vor : JA) "

für den Fernzugriff kann Cpanel oder andere Personen den Fernzugriff für Ihre lokale IP-Adresse gewähren.

In der obigen Fehlermeldung: "101.123.163.141" ist die IP Ihres lokalen Computers. Zuerst müssen wir den Fernzugriff in Cpanel-> Remote MySQL® gewähren. Führen Sie dann Ihre Anwendung aus, um eine Verbindung herzustellen.

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();    

Ich hoffe, es wird Ihr Problem lösen.

Vielen Dank

0

Ich musste mein SQL-Setup (in meinem Host, in meinem Fall Dreamhost) ändern, damit der Benutzername von anderen Hosts auf die Datenbank zugreifen kann, nicht nur Dreamhost, da ich ein Programm von der IDE auf meinem Computer aus ausführte. Ich habe dies vorerst getan, indem ich% zur Liste der zulässigen Hosts hinzugefügt habe. Es funktioniert jetzt! 

0
Chris Appleby