DB

MySQL 8.0 'Access denied' 오류 해결법 — 인증 방식 변경 [우분투,mySQL8.0]

곽코딩루카 2025. 4. 2. 14:59
반응형

 MySQL 8.0 'Access denied' 오류 해결법 — 인증 방식 변경(auth_socket → mysql_native_password)

Spring Boot, MyBatis, DBeaver, 또는 JDBC로 MySQL 8.0에 연결하려고 할 때 다음과 같은 오류를 본 적 있나요?

java.sql.SQLException: Access denied for user 'root'@'localhost'

처음에는 비밀번호가 틀렸다고 생각할 수 있지만, MySQL 8.0부터 기본 인증 방식이 바뀌었기 때문에 발생하는 문제입니다.


 문제 상황

MySQL 8.0 이상 버전에서는 기본 사용자 인증 방식이 바뀌었습니다.

 

특히 우분투에서 apt로 설치하면, root 계정은 기본적으로 auth_socket 방식이 됩니다.
이 방식은 리눅스 사용자 이름으로 인증하기 때문에, Spring이나 DBeaver 같은 외부 도구에서는 접속이 불가능합니다.


 인증 방식 확인하기

터미널에서 MySQL에 루트 계정으로 접속합니다.

sudo mysql -u root -p

 

이후 아래 쿼리로 현재 인증 방식을 확인합니다:

USE mysql;
SELECT user, host, plugin FROM user WHERE user = 'root';

 

예시 결과:

+------+-----------+-------------+
| user | host      | plugin      |
+------+-----------+-------------+
| root | localhost | auth_socket |
+------+-----------+-------------+

plugin이 auth_socket이면 Spring에서 접속이 되지 않습니다.


 해결 방법: 인증 방식을 mysql_native_password로 변경

아래 쿼리로 인증 방식을 변경해줍니다:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '원하는비밀번호';
FLUSH PRIVILEGES;

 

예시:

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

 

다시 확인해봅니다:

SELECT user, host, plugin FROM user WHERE user = 'root';
 
| root | localhost | mysql_native_password |

이렇게 나오면 성공입니다 

 

 인증 방식 요약 비교

인증 방식설명외부 접속 가능 여부
auth_socket 리눅스 사용자 이름 기반 인증
caching_sha2_password SHA256 기반 인증, 보안은 좋지만 호환성 이슈 있음 ⚠️
mysql_native_password SHA1 기반, 가장 호환성 높음

 

MySQL 8.0 이상을 사용할 때는 꼭 인증 방식을 확인하세요.
운영환경에서는 별도 사용자(app_user)를 만들어 사용하는 것도 보안에 도움이 됩니다.

반응형