MySQL의 연동 오류 java.sql.SQLException

koeyhoyh·2021년 6월 10일
1

MY_SQL

목록 보기
2/2

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

이 글에서는 이 오류의 해결방법만 다룬다.

NetBean과 MySQL을 연동해 여러 가지 상호작용을 해야 하는데 계속해서 이런 오류만 발생했다.

열심히 해결 방법을 찾아보았다.


해결 방법 1.

출처: https://shonm.tistory.com/387 [정윤재의 정리노트]

User 컬럼의 localhost 와 % 의 비밀 번호 정보가 다르게 입력 되어 있을 수 있다.

mysql 의 데이터베이스 mysql 로 들어가서

User 테이블의 정보를 확인 해 본다.

User 컬럼의 localhost 와 % 의 비밀 번호 정보가 다르게 입력 되어 있을 수 있다.

다를 경우

update user set Password=Password('05ghcjfl') where User='smadeco' and Host='%';

commit;

FLUSH PRIVILEGES;

해결해준다.

하지만 나는

password 필드가 없다고 나왔다.

그래서 user의 필드를 봐보니

이렇게 여러 개의 항목이 있었다.

이제 테이블에 들어있는 실제 항목을 보니 root는

이러한 항목을 가지고 있었다. 왜 정렬이 안 된채로 나오는 것인지는 잘 모르겠다.

비밀번호를 어떻게 수정하는지 전혀 모르겠다.

결국 이 방법으로는 해결하지 못했다.


해결 방법 2.

권한이 없는 문제일 경우 (가장 흔히 적혀있는 해결 방법)

  1. 권한이 없는 문제일 경우
GRANT ALL PRIVILEGES ON *.*TO 'user_id'@'%' IDENTIFIED BY 'user_password' with GRANT OPTION;

FLUSH PRIVILEGES;

나는 문법 오류가 나온다...

이유를 잘 모르겠다.

이 방법으로도 해결하지 못했다.


해결 방법 3.

새로운 사용자를 만들어 권한을 주고 이용

참고 : https://ssungkang.tistory.com/entry/MySQL-%EC%82%AC%EC%9A%A9%EC%9E%90-%EB%AA%A9%EB%A1%9D-%EC%B6%94%EA%B0%80-%EC%A0%9C%EA%B1%B0-%EB%B0%8F-%EA%B6%8C%ED%95%9C-%EB%B6%80%EC%97%AC-%EC%A0%9C%EA%B1%B0

create user {username}@{ip} identified by '{password}';

username 과 password에 원하는 계정의 정보를 적어줄 수 있다.

ip는 특정 ip에서의 접속을 허용하는데 사용된다.

로컬에서 접근하기 위한 계정은 localhost를 기재하면 되고 외부에서 접근하는 것은 그에 맞는 ip 주소를 기재해주면 됩니다.

(ip에서 %는 모든 외부 주소에서의 접근을 허용한다는 의미이다.)

직접 만들어 보았다.

모든 스키마의 모든 테이블의 모든 권한을 사용자에게 부여

grant all privileges on *.* to {username}@{ip};

다음은 주로 root 계정에서 부여되는 권한이다.

실행을 해 주었다.

이 해결방법으로도 해결되지 않아서 찾아보니

결국 내 코드의 이해에 대한 실수가 있었다.

연동은 잘 되어 있었다.


해당 ip에서 접근을 허용하지 않을 때
: https://manli000.wordpress.com/2015/01/04/java-sql-sqlexception-access-denied-for-user-idxxx-xxx-xxx-xxx-using-password-yes/

DB 비밀번호를 8자리 이상으로 설정하지 않는다면 발생할 수 있다고 합니다.
: https://shlee0882.tistory.com/286

stack overflow 여러가지 해결방법 링크
: https://stackoverflow.com/questions/11922323/java-sql-sqlexception-access-denied-for-user-rootlocalhost-using-password

진짜로 이 문제를 겪고 있는 분들은 아마 위의 해결과정으로 해결이 될 것 같습니다. 죄송합니다.


MySQL과 Java를 연동하여 간단히 테스트 하는 방법 (MySQLConn)

참고 : https://sarc.io/index.php/mariadb/269-mysql-java-mysqlconn

실제로 mysql과의 연동에 문제가 있는 것인지 ,

아니면 코드에 문제가 있는 것인지 꼭 알아보고 그 후에 방법을 찾아보도록 하자.

원래는 NetBean에서 id를 바꾸어 입력하면 'root'@'localhost'에서 '입력한 id'@'localhost'로 변했었는데 왜 이렇게 메시지가 나오는 지 잘 모르겠다..

사실 NetBean의 코드 문제였던 걸까.. 문제가 맞았다.
그래서 test를 해보기로 했다.

참고 사이트에서 예제문장을 조금 바꾸어 실행해주었다.
그랬더니 실행이 되었다...

결국에는 내 실수였다.
내 무지함이 스스로 예외와 에러를 만들어내었다.
프로젝트에서 사용하는 코드이다 보니 서로 나누어 작성하는데 git, github등을 사용한 것이 아니라 서로 카카오톡을 사용하며 공유하다 보니 수정한 부분을 적어주는 데도 잘 알아보지 못하고 사용도 잘 못했던 것 같다.

다음부터는 이런 실수롤 하지 않도록 꼭 점검하고 확인하는 습관을 가지겠다.
그리고 코드의 주석에 대한 중요함을 몸으로 깨닫게 되었다.

profile
내가 만들어낸 것들로 세계에 많은 가치를 창출해내고 싶어요.

0개의 댓글