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();
다음은 동일한 시나리오입니다.
만, localhost
PC를 사용하다 나는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★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 사용).
문제 해결 방법:
- 새 사용자 생성(MySQL 워크벤치 또는 사용 중인 유사한 GUI에서)
- GUI에서 DBA 권한 부여(DBA 확인란 선택)
- 스프링 부트 애플리케이션을 실행합니다.
또는 @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에서 프로그램을 실행하고 있기 때문입니다.일단 허용 가능한 호스트 목록에 %를 추가하여 작업을 수행했습니다.이제 됐다!
선언 순서:
- 드라이버
- 접속 문자열
- 사용자 이름
- 패스워드
순서대로 선언하면
- 접속 문자열
- 사용자 이름
- 패스워드
- 드라이버
응용 프로그램이 실패합니다.
- 올바른 버전의 jar를 사용합니다.
- 루트 사용자에게 호스트에 의존하지 않는 액세스 권한을 부여하거나 사용자를 만듭니다.
이 솔루션은 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의 새로운 사용자 및 패스워드를 작성한 이유는 아래와 같습니다.비밀번호가 인코딩된 형식인 경우 새 비밀번호를 생성하십시오.
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
'source' 카테고리의 다른 글
파라미터를 Angular에 전달할 수 있습니까?JS 컨트롤러가 생성 중입니까? (0) | 2022.09.17 |
---|---|
다단계 도커 빌드에서 MariaDB 데이터 dir를 복사할 수 없습니다. (0) | 2022.09.17 |
j쿼리 포커스 상실 이벤트 (0) | 2022.09.17 |
MySQL에서 Auto Increment 값의 현재 개수를 변경하시겠습니까? (0) | 2022.09.17 |
Python을 사용하여 파일 이름을 변경하는 방법 (0) | 2022.09.17 |