Centos mysql 외부접속 허용 - centos mysql oebujeobsog heoyong

MySQL 설치는 끝났다.

하지만 외부에서 DB로 접근이 아직 안된다.

방화벽 포트를 열어주고, MySQL에서 권한을 부여해야한다.

1. 방화벽 포트 개방

ssh를 위한 22번과 MySQL 3306포트가 열린것을 확인할 수 있다.

[jamong@localhost ~]$ sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
[jamong@localhost ~]$ sudo firewall-cmd --reload
success
[jamong@localhost ~]$ sudo firewall-cmd --list-ports
22/tcp 3306/tcp

포트 변경을 하고싶다면 /etc/my.cnf 설정파일에 port=원하는 포트로 수정 혹은 추가를 해주면 된다.

2. MySQL 권한 부여

-모든 ip 개방

mysql> GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '비밀번호';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

-특정 대역 개방

mysql> GRANT ALL PRIVILEGES ON *.* TO root@'192.168.%' IDENTIFIED BY '비밀번호';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

-특정 ip 개방

mysql> GRANT ALL PRIVILEGES ON *.* TO root@'192.168.0.5' IDENTIFIED BY '비밀번호';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

MySQL 설치 및 환경 설정까지 마친다.

Host 'IP' is not allowed to connect to this MySQL server

- Mysql 은 기본적으로 Local에서만 접속이 가능하도록 되어있다 때문에 별도의 설정을 해주어야  원격 접속이 가능하다

1. root의 접속권한 확인

- root 계정으로는 local에서만 접근 가능함을 알 수 있다

mysql > SELECT Host,User,authentication_string FROM mysql.user;

2. 원격접속 허용

2.1 원격 유저 생성

create user 'root'@'%' identified by 'crew1207';

2.2 권한 부여

1) 모든 IP 허용

mysql > GRANT ALL ON *.* TO root@'%';

mysql > FLUSH PRIVILEGES;

2) IP 대역 허용

- 다음과 같이 설정하면 10.0로 시작하는 모든 IP가 허용된다.

mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.%' identified by '패스워드';

mysql > FLUSH PRIVILEGES;

3) 특정 IP 1개 허용

- 다음과 같이 설정하면 10.0.0.1의 IP만 원격접속을 허용한다

mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.0.1' identified by '패스워드';

mysql > FLUSH PRIVILEGES;

3. 원격접속 허용전으로 되돌리기

 - DELETE FROM mysql.user WHERE Host='%' AND User='root'; FLUSH PRIVILEGES;

4. 원격접속 하기

# mysql -h '원격서버의ip 또는 도메인' -u '원격접속이 허용된 사용자이름' -p 

MySQL을 내 PC에 깔고 사용하는 유저가 아니라면 외부에서 접속이 필요하다. 외부에서 MySQL에 접근하려면 어떻게 해야할까? 우리가 일반적으로 사용하는 접속정보에 그 답이 있다. 접속정보는 대부분 아래와 같은 특성을 가진다.

  • IP주소와 PORT는 필수적이다.
  • 접속하려는 USER와 PASSWORD가 필요하다.
  • 대상 DATABASE 어딘지 알아야 한다.

위와 같은 정보를 제공하기 위해서는 몇 가지 작업이 필요하다.

방화벽 PORT 열기

PC나 서버나 방화벽이 있다. 외부에서 접근하기 위해서는 PORT를 열어주어야 한다. MySQL에서 사용되는 PORT는 다음과 같이 확인이 가능하다.

SHOW VARIABLES LIKE 'PORT';

Centos mysql 외부접속 허용 - centos mysql oebujeobsog heoyong

MySQL을 기본적으로 3306을 사용한다. 내가 설치하지 않은 경우에는 아닐 수 있으니 PORT를 확인하는 방법은 알아두는 것이 좋다.

PORT를 확인했으면 firewall-cmd 명령으로 PORT를 열자.

sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload

Centos mysql 외부접속 허용 - centos mysql oebujeobsog heoyong

외부 접속권한 부여

MySQL은 USER를 내부에서 생성하고 권한을 부여할 수 있다. 학습하는 과정이니 root 유저를 사용하는 것도 괜찮으나 유저를 생성하여 권한을 부여해보자.

USER 생성

MySQL에 접속 후 USER를 생성하겠다. 유저를 생성하는 문장은 다음과 같다.

CREATE USER <USER>@'<USER IP>' IDENTIFIED BY '<root 비밀번호>';

USER IP는 USER가 접속할 때, MySQL서버에서 보이는 IP이다. 대부분 공인IP나 내부 네트워크일 경우 ipconfig로 확인 할 수 있다. 확인하는 과정은 꽤 번거로운 과정이 있으므로 아래와 같이 '%'를 활용하여 모든 IP에서 접속이 가능하도록 만들겠다.

CREATE USER <USER>@'%' IDENTIFIED BY '<root 비밀번호>';

그럼, zdevowl로 USER를 만들어보자.

CREATE USER zdevowl@'%' IDENTIFIED BY 'Passw0rd12#';

Centos mysql 외부접속 허용 - centos mysql oebujeobsog heoyong

유저를 만든 다음에는 권한을 부여해야한다. 권한을 부여하는 구문은 다음과 같다.

GRANT <priv_type> ON <priv_level> TO <USER>@'<USER IP>;

권한도 세분화하면 여러가지가 있으나 지금은 priv_type은 ALL, priv_level은 .로 부여하겠다.

GRANT ALL ON *.* TO zdevowl@'%';

권한을 부여한후에는 아래와 같이 FLUSH 해야한다.

FLUSH PRIVILEGES;

Centos mysql 외부접속 허용 - centos mysql oebujeobsog heoyong

마치며...

외부접속을 허용하는 과정이 생각보다 까다로웠으나 그 만큼 보안에 신경을 쓰고있다는 것을 느꼈다. 미래의 나에게 꽤 도움되는 글이라 생각한다.