java.sql.sqLException: toegang geweigerd voor gebruiker ‘root’ @ ‘localhost’ (met behulp van wachtwoord: ja)

De volgende code:

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

Werp deze uitzondering op 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)

Hoe is dit veroorzaakt en hoe kan ik het oplossen?

bewerken:

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

produceert:

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)

Antwoord 1, autoriteit 100%

Omdat u een geheel nieuwe database aan het maken bent, kunt u het volgende gebruiken:

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

Hier is een identiek scenario.


Antwoord 2, autoriteit 97%

Dit kan je helpen:

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

Voer het uit met de opdrachtregel of een GUI-tool.

Vergeet niet %password%te vervangen door een echt wachtwoord.


Antwoord 3, autoriteit 90%

Dit is specifiek voor Ubuntu 18.04 LTS en MySQL 5.x
Deze linkgevolgd
Volg alles vanaf hier:

sudo mysql_secure_installation
sudo mysql

Eenmaal ingelogd op MySQL, voer dan vanaf de MySQL-prompt deze opdrachten uit:

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

Controleer nu of de tabel het wachtwoord voor de root heeft

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

Dit heeft mijn probleem opgelost en nu kan ik inloggen.


Antwoord 4, autoriteit 45%

Ik had een soortgelijk probleem, maar het verschil was: ik heb mijn JavaApp niet uitgevoerd vanaf localhost, maar vanaf een externe pc. Dus ik kreeg zoiets als java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES)
Om dit op te lossen, kunt u eenvoudig inloggen op phpMyAdmin, ga naar Users, klik op add useren voer de host in van waaruit u uw JavaApp wilt uitvoeren (of kies Any Host)


Antwoord 5, autoriteit 35%

u kunt dit gebruiken

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

je moet het juiste root-wachtwoord opgeven.


Antwoord 6, autoriteit 15%

Dit lijkt meestal te gebeuren wanneer de MySQL-gebruikersnaam en het wachtwoord niet correct zijn. Controleer uw MySQL-gebruikersnaam en wachtwoord.


Antwoord 7, autoriteit 15%

Ik had hetzelfde probleem zoals hieronder

"java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)". Problem was "WRONG PASSWORD". 

Kopieer en plak de query zoals hij is in de shell om te controleren of deze de gewenste uitvoer geeft of niet. Kleine fouten kosten meer tijd.


Antwoord 8, autoriteit 10%

U moet de db specificeren waarmee u verbinding maakt:

jdbc:mysql://localhost:3306/mydb

Antwoord 9, autoriteit 5%

Ik had hetzelfde probleem. Mysql-servicepoortnummer toegevoegd (3307), het probleem is opgelost.

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

Antwoord 10, autoriteit 5%

Probeer het zo….

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

Antwoord 11, autoriteit 5%

Hoewel dit misschien niet de oorzaak van uw probleem is, krijgt u dezelfde foutmelding als er twee MySQL-services op dezelfde poort draaien. U kunt vensters controleren door naar de lijst met services te kijken op het tabblad Services van Taakbeheer.


Antwoord 12, autoriteit 5%

Deze uitzondering wordt ook veroorzaakt door een niet-overeenkomende versie van mysql db en uw pom.xml/jar.

Zorg ervoor dat uw pom.xml/jar-versie hoger is dan uw mysql db-versie.
Omdat hogere versies compatibel zijn met lagere versies, maar hetzelfde geldt niet voor het omgekeerde.

Oplossing voor Java-project

  • Vervang de pot door een geschikte versie.

Oplossing voor op maven gebaseerde

  • Verander de afhankelijkheidsversie in pom.xml

Oplossing voor veerlaars
– Overschrijf de afhankelijkheid van de veerboot door toe te voegen
5.1.5.Finale


Antwoord 13, autoriteit 5%

Mijn application.propertieszag er ongeveer zo uit

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root

Het enige dat voor mij werkte, was maven opschonen en vervolgens maven installeren.


Antwoord 14

Ik moest mijn SQL-configuratie wijzigen (in mijn host, Dreamhost in mijn geval) om de gebruikersnaam toegang te geven tot de database vanaf andere hosts, niet alleen Dreamhost, omdat ik een programma vanuit de IDE op mijn computer draai. Ik deed dat voor nu door % toe te voegen aan de lijst met toegestane hosts. Het werkt nu!


Antwoord 15

De volgorde van declareren:

  • Bestuurder
  • Verbindingsreeks
  • gebruikersnaam
  • wachtwoord

Als we in orde verklaren

  • Verbindingsreeks
  • gebruikersnaam
  • wachtwoord
  • Bestuurder

de toepassing zal mislukken


Antwoord 16

  1. gebruik de juiste pot (met de juiste versie)
  2. geef root-gebruiker host-onafhankelijke toegang of maak een gebruiker

Antwoord 17

Voor mij werkte de oplossing door het url-formaat te wijzigen in:
con=DriverManager.getConnection(“jdbc:mysql://localhost/w3schools?user=###&password=###”);
zorg ervoor dat je de juiste jar toevoegt aan het klassenpad en gebruik de driver
Class.forName(“com.mysql.jdbc.Driver”);


Antwoord 18

Ik gebruik Spring Boot 2.2.6 (Windows) en kreeg hetzelfde probleem toen ik de applicatie probeerde uit te voeren:
java.sql.SQLException: toegang geweigerd voor gebruiker ‘root’@’localhost’ (met wachtwoord: JA)

Wat heeft mijn probleem opgelost:

  1. Maak een nieuwe gebruiker (vanaf de MySQL-werkbank of een vergelijkbare GUI die u mogelijk gebruikt)
  2. Verleen DBA-privileges (vink het DBA-aanvinkvakje aan) ook vanuit de GUI
  3. Voer de lente-opstarttoepassing uit.

Of volg de @evg-oplossing om privileges te verlenen vanaf de opdrachtregel in Linux env.


Antwoord 19

Dit heeft het probleem voor mij opgelost.

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT ALL PRIVILEGES ON *.cfe TO 'root'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Antwoord 20

Ik had ook hetzelfde probleem. Mijn verbindingsreeks is geldig en gebruikersnaam en wachtwoord zijn ook geldig, zelfs de gebruiker heeft voldoende rechten om toegang te krijgen tot de database.

Ik heb dit probleem opgelost door de tijdelijke map gemaakt door MySQL te verwijderen(Maak een back-up voordat u mappen verwijdertdus als het niet werkt, kunt u die bestanden opnieuw plaatsen).

Standaard maplocatie voor tijdelijke en verbindingsbestanden van MySQL in Windows is:

C:\ProgramData\MySQL

Ik heb de onderstaande map verwijderd (back-up gemaakt):

C:\ProgramData\MySQL\MySQL Server \Data\sys

Opmerking:Voordat u items verwijdert, moet u ervoor zorgen dat de MySQL-service niet is gestart, anders kunnen er geen bestanden worden verwijderd

En het werkt voor mij.


Antwoord 21

Als ik een springboot-project run, is de application.yml-configuratie als volgt:

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/lof?serverTimezone=GMT
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

Merk op dat er geen aanhalingstekens om het wachtwoord staan. En ik kan dit project in mijn Windows-systeem uitvoeren.

Maar wanneer ik probeer te implementeren op de server, heb ik het probleem en ik los het op door de application.yml te wijzigen in:

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/lof?serverTimezone=GMT
    username: root
    password: "root"
    driver-class-name: com.mysql.cj.jdbc.Driver

Antwoord 22

Voeg poortnummer toe (zoiets als 3306) in:

Connection c = DriverManager.getConnection("jdbc:mysql://localhost:urport","root","root");

Antwoord 23

Ik ben deze fout tegengekomen. Het probleem was dat ik de verkeerde databasenaam had.


Antwoord 24

Als u verbinding maakt met een externe mysql-server vanaf uw lokale machine met behulp van java, volg dan de onderstaande stappen.
Fout :
“java.sql.SQLException: Toegang geweigerd voor gebruiker ‘xxxxx’@’101.123.163.141’ (met wachtwoord: JA) “

voor toegang op afstand kan cpanel zijn of anderen verlenen de toegang op afstand voor uw lokale IP-adres.

In de bovenstaande foutmelding: “101.123.163.141” is het ip van mijn lokale computer. Dus eerst moeten we externe toegang geven in de Cpanel-> Externe MySQL®. Voer vervolgens uw applicatie uit om verbinding te maken.

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

Ik hoop dat het uw probleem zal oplossen.

bedankt


25

Als u een MySQL Workbench gebruikt, gaat u naar de startpagina van Workbench, klik met de rechtermuisknop op uw database, kopieer de JDBC-verbindingsreeks en plak deze in het Java-programma.

Other episodes