MySQL 외부접속 가능하도록 설정하기
개발하는 컴퓨터에서 서버에 접속해 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'을 눌러 추가한 뒤 원하는 권한을 체크해 설정해 주면 된다.