[Spring] 도커에서 MySQL 서버 올리기, DBeaver Access denied 에러 해결 방법

민지·2025년 8월 6일
0

Spring

목록 보기
30/37

Windows 에 Docker Desktop 만 설치 되어 있으면 Mysql 계정 생성이 가능하다. Docker 로 MySQL 컨테이너를 띄우는 방식이면 MySQL 계정이 만들어질 수 있다.

전제 조건

✔️Docker Desktop 이 설치되어 있어야 함
✔️docker-compose.yml 또는 Makefile 안에 MySQL 생성 관련 설정이 있어야 함
✔️make 명령이 Windows 또는 WSL 에서 사용 가능해야 함


Makefile 에서의 db-up 자체는 단순히

db-up:
	docker-compose up -d --force-recreate

만 실행할거고 (계정이나 DB가 생성되지 않음)

docker-compose.yml 안에 지정된 환경변수(MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD)를 넣으면 컨테이너가 처음 시작될 때 자동으로 MySQL 계정과 DB가 생성된다. 이렇게 만들어진 계정은 컨테이너 최초 실행 시에 pass_local_user@'%' 어디서든 접근 가능한 계정이 자동 생성된다.

Access denied for user 'pass_local_user'@'localhost' (using password: YES)

Access denied 는 크게 두 가지 이유가 있다.
비밀번호가 틀리거나 플러그인이 안 맞는 경우와 권한이 없는 경우이다.


추가적으로 DBeaver 연결 설정을 확인해볼 게 있다.

DBeaver 연결 설정 확인

Username 과 Password 를 맞게 입력했는지,
Host 는 localhost 가 맞는지, (또는 127.0.0.1 둘 다 시도)
Port 는 3306,
Driver Properties: allowPublicKeyRetrieval = true, useSSL = false (useSSL false 는 로컬 개발 환경일 경우 설정해두면 편함)

다시 Test Connection 해보고 안된다면,


컨테이너 내부 MySQL 들어가기

docker exec -it mysql_local mysql -u root -p

1. 비밀번호가 틀리거나 플러그인이 안 맞는 경우

MySQL 8.0 은 기본이 caching_sha2_password 인데, DBeaver에서 연결 시 이 플러그인을 제대로 못 쓸 수도 있다. 우리가 mysql_native_password 로 바꿨으니 다시 한 번 현재 플러그인과 비밀번호가 제대로 저장됐는지 확인이 필요하다.

SELECT user, host, plugin FROM mysql.user WHERE user = 'pass_local_user';

여기서
host 가 localhost 인지,
plugin 이 mysql_native_password 인지 체크

만약 플러그인이 caching_sha2_password 라면 다시 바꿔줘야 한다.

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

2. 권한이 없는 경우

계정이 있어도 해당 DB 에 접근 권한이 없으면 로그인은 되더라도 DB 선택 시 거부된다.

현재 계정 권한 확인

SELECT user, host FROM mysql.user WHERE user = 'pass_local_user';

권한이 부족한지 확인

SHOW GRANTS FOR 'pass_local_user'@'%';

GRANT ALL PRIVILEGES ON `pass_local`.* TO 'pass_local_user'@'%'` 이런게 있어야한다.

없다면 권한 다시 부여

GRANT ALL PRIVILEGES ON pass_local.* TO 'pass_local_user'@'localhost';
FLUSH PRIVILEGES;

그래도 안되면..

아예 기존 계정 삭제하고
새로 계정 만든 후 권한 부여도 다시 해보자

-- 1. 기존 계정 삭제
DROP USER IF EXISTS 'pass_local_user'@'localhost';

-- 2. 새 계정 생성 (mysql_native_password로)
CREATE USER 'pass_local_user'@'localhost'
IDENTIFIED WITH mysql_native_password BY '새비밀번호 입력';

-- 3. 권한 부여 (pass_local 데이터베이스 전체 권한)
GRANT ALL PRIVILEGES ON pass_local.* TO 'pass_local_user'@'localhost';

-- 4. 변경 적용
FLUSH PRIVILEGES;

이렇게 하면 꼬인 플러그인/비밀번호 문제 싹 정리되고, DBeaver에서 바로 접속될 거다.
profile
개발일지

0개의 댓글