Print
카테고리: [ MariaDB ]
조회수: 3997
 
지난  글에서 FEDERATED 엔진을 간단히 살펴보았는데
해당 글에서 소개한 
MariaDB [(none)]> create table fed_test_local.fed_test_local ( num int)
    -> engine=federated connection='mysql://test:이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다.:1111/fed_test_remote/fed_test_remote';
 
구문으로 생성 시 원격지 서버 접속정보가 노출 되는 보안 취약점이 있습니다.
이번 글에서는 보안 취약점과 해결방법에 대해 알아보겠습니다.
 

1) 원격지 테이블 생성

 
mysql> create table fed_test_remote.fed_test_remote ( num int);
Query OK, 0 rows affected (0.04 sec)
 

 

2) local 테이블 생성 (federated 엔진)

MariaDB [(none)]> create table fed_test_local.fed_test_local ( num int)
    -> engine=federated connection='mysql://test:이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다.:1111/fed_test_remote/fed_test_remote';
 Query OK, 0 rows affected (0.04 sec)
 
 

3) 테이블 생성 구문 확인

 
MariaDB [(none)]> show create table fed_test_local.fed_test_local\G;
*************************** 1. row ***************************
       Table: fed_test_local
Create Table: CREATE TABLE "fed_test_local" (
  "num" int(11) DEFAULT NULL
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 COLLATE=utf8_bin CONNECTION='mysql://test:이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다.:1111/fed_test_remote/fed_test_remote'
1 row in set (0.00 sec)
 
=> 원격지의 접속 정보 (계정,패스워드,IP address) 노출 되어 보안상 위험함
 
 
 

4) 해결방법

=> FEDERATED 엔진 테이블 생성 시 remote 서버 정보를 기재하는 구문이 아닌  remote 서버 정보 등록 하여 생성하는 방법 사용

MariaDB [(none)]> CREATE SERVER fed_security
    -> FOREIGN DATA WRAPPER mysql
    -> OPTIONS (
    -> USER 'test',
    -> PASSWORD 'test123',
    -> HOST '원격지 HOST',
    -> PORT 3310,
    -> DATABASE 'fed_test_remote');
Query OK, 0 rows affected (0.00 sec)
 
=> 원격지<->로컬 통신 위한 서버 생성
 
MariaDB [(none)]> create table fed_test_local.fed_security ( num int) 
    -> engine=federated connection='fed_security/fed_test_remote';
 Query OK, 0 rows affected (0.04 sec)
 
=> connection='생성한 서버명/원격지 테이블명'
 
MariaDB [(none)]> select * from fed_test_local.fed_security;
+------+
| num  |
+------+
|    1 |
+------+
1 row in set (0.01 sec)
 
=> 테이블 정상생성 확인
 
 
MariaDB [(none)]> show create table fed_test_local.fed_security\G;
*************************** 1. row ***************************
       Table: fed_security
Create Table: CREATE TABLE "fed_security" (
  "num" int(11) DEFAULT NULL
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 COLLATE=utf8_bin CONNECTION='fed_security/fed_test_remote'
1 row in set (0.00 sec)
 
=> 원격지의 접속정보가 없음 확인