MySQL에서 새 사용자 생성 후 접근이 거부되는 이유
MySQL에서 새 사용자를 만들고 모든 권한을 부여했는데도 여전히 'Access Denied(접근 거부)' 오류가 발생한다면, 대부분의 원인은 권한 테이블이 아직 갱신되지 않았기 때문입니다. 사용자를 생성하고 GRANT 문으로 권한을 부여한 후에는 반드시 FLUSH PRIVILEGES 명령을 실행해야 변경 사항이 정상적으로 적용됩니다.
FLUSH PRIVILEGES 기본 문법
권한 설정을 다시 로드하는 구문은 아래와 같습니다.
FLUSH PRIVILEGES;
이 명령은 mysql 데이터베이스의 grant 테이블을 다시 읽어 들여, 새로 추가된 사용자 계정과 권한 정보를 서버에 즉시 반영합니다.
1단계: 새 사용자 생성하기
먼저 새로운 사용자를 생성합니다. 여기서는 예시로 'Bob'이라는 이름의 사용자를 만들어 보겠습니다.
mysql> CREATE USER 'Bob'@'%' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.56 sec)
위 쿼리에서 '%'는 모든 호스트에서 해당 사용자로 접속할 수 있음을 의미합니다. 특정 호스트에서만 접속을 허용하려면 'localhost' 또는 특정 IP 주소를 지정하면 됩니다.
2단계: 모든 권한 부여하기
다음으로 생성한 사용자 Bob에게 모든 데이터베이스에 대한 전체 권한을 부여합니다.
mysql> GRANT ALL PRIVILEGES ON *.* TO 'Bob'@'%' WITH GRANT OPTION; Query OK, 0 rows affected (0.23 sec)
- *.*: 모든 데이터베이스의 모든 테이블을 의미합니다.
- WITH GRANT OPTION: 해당 사용자가 다른 사용자에게 자신의 권한을 위임할 수 있도록 허용하는 옵션입니다.
3단계: 권한 새로고침(FLUSH PRIVILEGES) 실행
권한 부여가 완료되었다면, 반드시 아래 명령으로 권한 테이블을 갱신해야 합니다.
mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.14 sec)
4단계: 새 사용자로 접속 테스트
이제 사용자 Bob과 비밀번호 123456을 사용하여 MySQL에 접속하면 정상적으로 로그인할 수 있습니다. 실제 접속 화면은 아래와 같습니다.

추가 팁: 그래도 접근이 거부된다면?
FLUSH PRIVILEGES를 실행한 후에도 오류가 계속된다면 다음 사항들을 확인해 보세요.
- 호스트 지정 확인: 사용자가
'Bob'@'%'로 생성되었는지, 원격 접속 시 호스트가 일치하는지 확인하세요. - 비밀번호 오타 확인: 비밀번호에 특수문자가 포함된 경우 따옴표 처리가 올바른지 점검하세요.
- MySQL 재시작: 드물지만 서버 재시작 후 권한이 정상 적용되는 경우도 있습니다.
- bind-address 설정: 원격 접속 시 my.cnf 파일의 bind-address 설정이 외부 접속을 차단하고 있지 않은지 확인하세요.
이처럼 사용자 생성과 권한 부여 후 FLUSH PRIVILEGES만 제대로 실행하면 대부분의 접근 거부 문제를 간단히 해결할 수 있습니다.