IT/SQL

MySQL 외부접속 가능하도록 설정하기

조스톡 2024. 1. 14. 17:19
728x90
반응형

 

개발하는 컴퓨터에서 서버에 접속해 DB를 가져오는 등의 요청을 하고 싶었으나 접속하려고 하면 안 됐다.

 

'포트가 열려있지 않아서 그런 건가?'라고 생각하고 포트를 여는 작업을 시도해도 실패...

 

그러나 방법은 가까우면서도 먼 곳에 있었다.

 

 

방법 1 : MySQL 8.0 Command Line Client

 

윈도우(Windows) 기준으로 'MySQL 8.0 Command Line Client'을 실행한다.

 

 

 

패스워드(password)를 입력하면 아래처럼 나온다.

 

 

 

mysql> create user 'user_id'@'%' identified by 'password';

mysql> SELECT user, host FROM mysql.user;

mysql> SHOW GRANTS FOR 'user_id'@'%';

 

이 부분이 가장 중요하다. 계정을 만드는데, 원하는 접근 방식을 추가하여 계정을 만들어야 한다.

 

'user_id'@'%'  : 해당 사용자는 외부에서 접근 가능
'user_id'@'localhost'  : 해당 사용자는 내부에서만 접근 가능
'user_id'@'123.123.123.123'  : 해당 사용자는 지정한 ip주소로만 접근 가능

 

이후 쿼리문을 보낸 후 제대로 만들어졌는지 확인한다.

'host'에 '%'가 생겼다면 외부에 접속할 수 있는 계정(사용자)이 만들어진 것이다.

 

 

 

그러나 아직 권한이 없어서 쿼리문을 보내도 할 수 있는 것이 매우 한정적이다.

 

 

 

아래처럼 쿼리문을 보내서 스키마에 대한 권한을 줄 수 있다.

 

'flush privileges'는 MySQL에서 권한 변경을 적용하고 메모리에 있는 권한 캐시를 갱신하는 명령어인데, 최근 버전은 굳이 하지 않아도 알아서 적용된다.

 

mysql> grant all privileges on db_name.* to 'user_id'@'%';
mysql> flush privileges;

 

 

다시 SHOW GRANTS FOR 'user_id'@'%'; 을 실행하면 권한이 추가된 것을 확인할 수 있다.

 

 

 

 

방법 2 : MySQL Workbench

 

MySQL Workbench을 실행한 뒤 'Server' 탭에서 'Users and Privileges'에 들어간다.

 

 

 

왼쪽 하단에 'Add Account' 클릭, 'Login Name'과 'Limit to Hosts Matching'은 위에서도 봤던 원하는 접근 방식을 입력, 'password'을 입력한 뒤 'Apply'을 클릭하면 계정이 만들어진다.

 

'user_id'@'%'  : 해당 사용자는 외부에서 접근 가능
'user_id'@'localhost'  : 해당 사용자는 내부에서만 접근 가능
'user_id'@'123.123.123.123'  : 해당 사용자는 지정한 ip주소로만 접근 가능

 

 

 

이후 권한을 주기 위해서 'Schema Privileges' 탭에 들어간다.

 

처음에는 아무것도 없을 텐데, 'Add Entry'을 눌러 추가한 뒤 원하는 권한을 체크해 설정해 주면 된다.

 

 

 

 

 

728x90
반응형