JooTC
mysql logo

MySQL 외부 접속 방법 및 허용을 위한 설정

mysql logo

MySQL 외부 접속 방법


MySQL(또는 MariaDB)에서 외부 접속을 허용할 수 있습니다. 외부 접근을 허용하게 되면 로컬 호스트가 아닌 외부 서버 또는 프로그램 등에서 데이터베이스에 접근할 수 있습니다. 예를 들어 특정 데이터베이스 서버를 다른 웹 서버에서 참조해야 될 일이 있을 경우 외부 접근을 허용해야 할 수 있습니다.

 

진행하기에 앞서 외부 접속 이전에 로컬 호스트에서의 데이터베이스 접속이 원활한지 확인해 볼 필요가 있습니다.

  • mysql 명령어를 이용하여 로컬 호스트에서 접속에 성공하는지 확인
  • 3306 포트가 열려있는지 확인

다음으로 mysql 설정 파일에서 외부 접속에 대한 차단 여부가 지정되지는 않았는지 확인해야 합니다.

/etc/my.cnf 파일을 열어 (my.cnf 파일의 위치는 MySQL, MariaDB 마다 다를 수 있습니다.) 아래 내용이 있는지 확인해주세요.

[mysqld]
bind-address=0.0.0.0

만약 bind-address 문구가 없다면 건너뛰셔도 되지만, 해당 항목이 존재한다면 bind-address 앞에 # 을 붙여 주석 처리해주시면 됩니다.

[mysqld]
#bind-address=0.0.0.0

만약 위 방법으로 진행되지 않는다면, 주석 처리를 해제한 후에는 정상적으로 동작하는지 확인해봐야 합니다.

 

이제 본격적으로 외부 접근을 허용해보도록 하겠습니다.

방법은 간단합니다. 먼저 원격 서버에 접속하여 mysql 명령어를 사용하여 데이터베이스에 접속합니다. (또는 Mysql Workbench와 같은 프로그램을 사용하여 접속하셔도 됩니다.)

$ mysql -uroot -p
Enter password: [패스워드 입력]
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 106
Server version: 10.1.33-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

 

접속에 성공하면 아래 명령어로 외부 접속을 허용할 유저를 생성합니다.

참고 : root 권한으로 외부 접속을 허용하는 방법도 있지만 보안상 새로운 유저를 생성하는 것을 권장합니다.

MariaDB [(none)]> create user '[UserName]'@'[HostName]' identified by '[Password]';

예를 들어 유저명이 hello, 호스트명이 myhost인 경우 아래와 같이 입력해주시면 됩니다.

create user ‘hello’@’myhost’ identified by ‘p@ssw0rd’;

여기에서 HostName에 들어가는 규칙에 따라 권한이 달라지는데 모든 호스트를 허용할 경우 ‘%’를, 로컬 호스트만 허용할 경우 ‘localhost’를 입력합니다. 아래 예시를 참조하세요.

# 모든 호스트 접속을 허용
MariaDB [(none)]> create user 'hello'@'%' identified by '[Password]';
# 로컬 호스트 접속만 허용
MariaDB [(none)]> create user 'hello'@'localhost' identified by '[Password]';
# 특정 IP에 대한 접속 허용
MariaDB [(none)]> create user 'hello'@'192.168.1.123' identified by '[Password]';
MariaDB [(none)]> create user 'hello'@'192.168.%' identified by '[Password]';

 

다음으로 생성된 유저에 대한 접근 권한을 설정합니다.

MariaDB [(none)]> grant all privileges on [DatabaseName].* to '[UserName]'@'[HostName]';

특정 DB(또는 전체 DB)에 대한 전체 권한을 부여하는 명령입니다. 유저명과 호스트명은 위에서 설정한 유저와 호스트 정보를 그대로 사용합니다. 데이터베이스명이 mydb인 경우 아래와 같이 입력해주시면 됩니다.

grant all privileges on mydb.* to ‘hello’@’myhost’;

모든 데이터베이스에 대한 접근을 허용할 경우 mydb 대신 * 을 넣어주시면 됩니다.

 

위 내용이 모두 적용 되었는지 확인하려면 아래 명령어로 유저와 허용된 호스트를 확인할 수 있습니다.

MariaDB [(none)]> SELECT User, Host FROM mysql.user;
+-------+-------------------+
| User  | Host              |
+-------+-------------------+
| hello | 192.168.1.123     |
| hello | 127.0.0.1         |
| root  | 127.0.0.1         |
| root  | ::1               |
+-------+-------------------+
4 rows in set (0.00 sec)

 

이제 모든 설정이 적용되었다면, 변경된 접근 권한을 적용해야 합니다. 서비스를 재시작하거나 규칙을 다시 로드합니다.

// MySQL 또는 MariaDB에서 권한 초기화
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

// MySQL 또는 MariaDB 서비스를 재시작
$ sudo service mysql restart
또는
$ sudo systemctl restart mysql

위 과정이 모두 완료되었다면, 외부 프로그램 등을 이용하여 데이터베이스에 접근할 수 있는지 확인하시면 됩니다.

구독
알림
guest

1 Comment
Inline Feedbacks
모든 댓글 보기
임채언
임채언
4 년 전에

덕분에 문제가 해결되었습니다!

1
0
이 포스트에 대한 의견을 남겨주세요!x