source

java.sql.SQLException:사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다(암호: YES 사용).

gigabyte 2022. 9. 17. 09:55
반응형

java.sql.SQLException:사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다(암호: YES 사용).

다음 코드:

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

를 에 설정합니다.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)

원인은 무엇이며, 어떻게 해결할 수 있습니까?

편집:

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

작성:

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)

다음과 같은 이점이 있습니다.

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

명령줄 또는 GUI 도구를 사용하여 실행합니다.

해 주세요.%password%이치노

이는 Ubuntu 18.04 LTS 및 MySQL 5.x Followed this link followed here 이후 모든 것을 팔로우합니다.

sudo mysql_secure_installation

sudo mysql

MySQL에 로그인하면 MySQL 프롬프트에서 다음 명령을 실행합니다.

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

테이블에 루트의 패스워드가 있는지 확인합니다.

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

이것으로 문제가 해결되어 로그인 할 수 있게 되었습니다.

데이터베이스를 처음부터 작성할 때 다음을 사용할 수 있습니다.

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

다음은 동일한 시나리오입니다.

만, localhostPC를 사용하다 나는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES)하고 "phMyAdmin"으로 합니다.Users을 클릭합니다.add user [JavaApp]를 선택합니다).Any Host)

이것을 사용할 수 있다

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

올바른 루트 비밀번호를 입력해야 합니다.

나는 아래와 같은 문제가 있었다.

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

쿼리를 그대로 셸에 복사하여 붙여넣어 원하는 출력을 얻을 수 있는지 확인합니다.작은 오류는 더 많은 시간을 소비합니다.

이 문제는 MySQL 사용자 이름과 비밀번호가 올바르지 않을 때 주로 발생합니다.MySQL 사용자 이름과 비밀번호를 확인합니다.

연결할 DB를 지정해야 합니다.

jdbc:mysql://localhost:3306/mydb

Spring Boot 2.2.6(Windows)을 사용하고 있는데, 어플리케이션을 실행하려고 했을 때 같은 문제에 직면했습니다.java.sql.SQLException: 사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다(암호: YES 사용).

문제 해결 방법:

  1. 새 사용자 생성(MySQL 워크벤치 또는 사용 중인 유사한 GUI에서)
  2. GUI에서 DBA 권한 부여(DBA 확인란 선택)
  3. 스프링 부트 애플리케이션을 실행합니다.

또는 @evg 솔루션에 따라 Linux env의 명령줄에서 권한을 부여합니다.

저도 같은 문제를 겪고 있었어요.mysql 서비스 포트 번호(3307)를 추가하여 문제를 해결.

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

이렇게 해봐...

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

이것이 문제의 원인은 아닐 수 있지만, 동일한 포트에서 두 개의 MySQL 서비스가 실행 중인 경우 동일한 오류가 발생합니다.작업 관리자의 서비스 탭에 있는 서비스 목록을 보고 창에서 확인할 수 있습니다.

이 예외는 mysql db와 pom.xml/jar의 버전이 일치하지 않기 때문에 발생합니다.

pom.xml/jar 버전이 mysql db 버전보다 높은지 확인하십시오.상위 버전은 하위 버전과 호환되지만, 그 반대의 경우에는 해당되지 않습니다.

Java 프로젝트용 솔루션

  • Jar를 적절한 버전으로 교체합니다.

메이븐 기반 솔루션

  • pom.xml에서 종속성 버전 변경

스프링 부트의 솔루션 - 5.1.5를 추가하여 스프링 부트의 의존성을 덮어씁니다.최종

★★★application.properties 모습

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

나에게 통했던 것은 깨끗하게 한 후 설치한 것뿐이다.

저 같은 경우에는 admin이라는 이름으로 새 사용자를 만들어서 사용했는데...

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost'
WITH GRANT OPTION;

CREATE USER 'admin'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%'
WITH GRANT OPTION;

SQL 셋업(호스트의 경우 Dreamhost)을 변경하여 Dreamhost뿐만 아니라 다른 호스트에서도 데이터베이스에 액세스할 수 있도록 해야 했습니다.컴퓨터의 IDE에서 프로그램을 실행하고 있기 때문입니다.일단 허용 가능한 호스트 목록에 %를 추가하여 작업을 수행했습니다.이제 됐다!

선언 순서:

  • 드라이버
  • 접속 문자열
  • 사용자 이름
  • 패스워드

순서대로 선언하면

  • 접속 문자열
  • 사용자 이름
  • 패스워드
  • 드라이버

응용 프로그램이 실패합니다.

  1. 올바른 버전의 jar를 사용합니다.
  2. 루트 사용자에게 호스트에 의존하지 않는 액세스 권한을 부여하거나 사용자를 만듭니다.

이 솔루션은 url 형식을 con=DriverManager.getConnection("jdbc:mysql://localhost/w3schools?user=###&password=#####")으로 변경함으로써 동작했습니다.클래스 경로에 적절한 jar를 추가하고 드라이버 Class.forName("com.mysql.jdbc")을 사용하십시오.드라이버";

나는 이 문제를 해결했다.

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

GRANT ALL PRIVILEGES ON *.cfe TO 'root'@'%' IDENTIFIED BY 'password';

FLUSH PRIVILEGES;

접속 문자열이 유효하고, 유저명과 패스워드도 유효합니다.사용자도 데이터베이스에 액세스 할 수 있는 충분한 권한이 있습니다.

MySQL에서 작성한 임시 폴더를 삭제함으로써 이 문제를 해결했습니다(폴더를 삭제하기 전에 백업을 주세요.그렇지 않으면 파일을 다시 저장할 수 있습니다).

Windows에서 MySQL의 임시 및 연결 파일의 기본 폴더 위치는 다음과 같습니다.

C:\ProgramData\MySQL

아래 폴더를 삭제(백업)했습니다.

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

참고: 항목을 삭제하기 전에 MySQL 서비스가 시작되지 않았는지 확인하십시오. 그렇지 않으면 파일을 삭제할 수 없습니다.

그리고 나한테도 효과가 있어.

springboot 프로젝트를 실행할 때 application.yml 설정은 다음과 같습니다.

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

패스워드 주변에는 따옴표가 없습니다.이 프로젝트는 윈도 시스템에서 실행할 수 있습니다.

그러나 서버에 도입하려고 하면 문제가 발생하여 application.yml을 다음과 같이 변경하여 수정합니다.

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

다음에 포트 번호(3306 등)를 추가합니다.

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

다음 명령어를 실행한 후 동일한 비밀번호를 사용하여 정상적으로 작동합니다.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=
spring.datasource.url=jdbc:mysql://localhost:3306/DATABASE_NAME? useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

phpmyadmin 데이터베이스로 이동합니다.

DATABASE_NAME이라는 이름의 데이터베이스를 만들고 권한으로 이동하여 데이터베이스에 권한이 있는 사용자를 확인하고 이들을 사용합니다.기본값은 "root"입니다.

mysql의 새로운 사용자 및 패스워드를 작성한 이유는 아래와 같습니다.비밀번호가 인코딩된 형식인 경우 새 비밀번호를 생성하십시오.

https://www.digitalocean.com/community/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql #:~:text=%3A가 아닌 %20is%20a, mysql_native_password%20plugin%20

PHP 일부 버전에는 caching_sha2_password 문제를 일으키는 알려진 문제가 있습니다.이 데이터베이스를 PHP 응용 프로그램(예를 들어 phpMyAdmin)과 함께 사용할 계획이라면, 대신 보안은 유지되지만 오래된 mysql_native_password 플러그인으로 인증하는 사용자를 생성할 수 있습니다.

이 에러가 발생했습니다.문제는 데이터베이스 이름을 잘못 알고 있다는 것이었습니다.

Java를 사용하여 로컬머신에서 리모트 mysql 서버를 접속하는 경우 다음 절차를 참조하십시오.오류: "java.sql.SQLException:사용자 'xxxx'@'101.123.163.141'에 대한 액세스가 거부되었습니다(패스워드: YES 사용).

리모트 액세스의 경우는, cpanel 이거나, 그 외의 경우는, 로컬 IP 주소에 대해서 리모트 액세스를 허가하는 경우가 있습니다.

위의 오류 메시지에서 "101.123.163.141"은 내 로컬머신 IP입니다.따라서 먼저 Cpanel-> Remote MySQL®에서 원격 액세스를 제공해야 합니다.그런 다음 응용 프로그램을 실행하여 연결합니다.

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

문제가 해결되길 바랍니다.

감사합니다.

저도 문제가 있어요. 이걸로 해결됐어요.

변경:

Sring url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&user=root&password=password";

설정:

"serverTimezone=UTC""Unified standard world time""useUnicode=true&characterEncoding=UTF-8""Solve Chinese garbled".

내 데이터베이스에는 중국어가 없습니다.하지만 효과가 있다.https://www.cnblogs.com/EasonJim/p/6906713.html에서 참조

MySql 워크벤치를 사용하는 경우 워크벤치의 홈 페이지로 이동하여 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 JDBC 연결 문자열을 복사하여 Java 프로그램에 붙여넣습니다.

언급URL : https://stackoverflow.com/questions/11922323/java-sql-sqlexception-access-denied-for-user-rootlocalhost-using-password

반응형