접근 권한(Access Control)이란, 허용한 IP 목록과 허용된 DB 사용자 외 다른 IP 및 DB사용자가 해당 브로커나 데이터베이스 서버로 접속하는 것을 제한하기 위해 사용됩니다. 이 기능을 사용하시면, 외부의 잘못된 접근으로 인하여 발생하는 문제로부터 데이터베이스를 보호할 수 있습니다.
CUBRID는 데이터베이스에 접속하는 브로커 및 CSQL 인터프린터를 제한하기 위한 데이터베이스 접속 제어 관리, 브로커에 접속하는 응용 클라이언트를 제한하기 위한 브로커 접속 제어 관리를 제공하고 있습니다.
이번 글에서는 데이터베이스 및 브로커 접속 제어 관리의 설정 방법과 모니터링 방법을 살펴보겠습니다.
작성된 예시는 CUBRID 9.3.6.0002 버전 기준입니다.
1. 데이터베이스 서버 접속 제어 관리
1) 데이터베이스 서버 접속 제어 관리 설정
① cubrid.conf 파일 설정($CUBRID/conf/cubrid.conf)
- 데이터베이스 서버의 접속 제어 관리 기능을 사용하기 위해서는 access_ip_control 파라미터를 yes로 설정해야 하며(기본 값은 no), access_ip_control_file(접속을 허용하는 IP 목록이 작성된 파일) 경로를 입력해야 합니다.
- 해당 설정 값은 데이터베이스 서버를 재 기동해야 적용 할 수 있습니다.
- 예시)
② access_ip_control_file 파일 작성 형식
[@<db_name>] <ip_addr> … |
- <db_name> : 접근을 허용할 데이터베이스 이름
- <ip_addr> : 접근을 허용할 IP 주소. 뒷자리를 *로 입력하면 뒷자리의 모든 IP를 허용.
하나의 데이터베이스 이름 다음 줄에 여러 줄의 <ip_addr>을 추가할 수도 있습니다.
- 예시)
- testdb 데이터베이스는 10.182으로 시작하는 모든 IP의 접속을 허용
- demodb 데이터베이스는 10.으로 시작하는 모든 IP와 192.168.0.83인 IP의 접속을 허용
- cubriddb 데이터베이스는 모든 IP의 접속을 허용
※ HA 구성이거나, Broker 서버를 분리 구성한 경우 해당 호스트의 IP를 반드시 적어주어야 합니다.
③ 이미 구동되어 있는 데이터베이스 서버에 새로운 access_ip_control_file 적용
cubrid server acl reload <database_name> -- HA 구성인 경우 @<hostname> 추가 |
- 예시)
④ 구동 중인 데이터베이스 서버의 접속 제어 관리 설정 내용 확인
cubrid server acl status <database_name> -- HA 구성인 경우 @<hostname> 추가 |
- 예시)
2) 데이터베이스 서버 접속 제어 관리 로그 확인
- 허용되지 않는 IP에서 접근할 경우 서버 에러 로그 파일에 기록이 남게 됩니다.
- 데이터베이스 서버 에러 로그는 $CUBRID/log/server 디렉터리에 생성되며, 파일 이름은<db_name>_<yyyymmdd>_<hhmi>.err 형식으로 저장됩니다.
- 예시)
2. 브로커 접속 제어 관리
1) 브로커 접속 제어 관리 설정
① cubrid_broker.conf 파일 설정($CUBRID/conf/cubrid_broker.conf)
- 브로커의 접속 제어 관리 기능을 사용하기 위해서는 access_control 파라미터를 on으로 설정해야 하며(기본 값은 off), access_control_file 파라미터 값에 접속을 허용하는 사용자와 데이터베이스 및 IP 목록이 작성된 파일의 경로를 입력해야 합니다.
- accss_control, accss_control_file 파라미터는 공통 적용 파라미터가 위치하는 [broker] 아래에 작성되어야 합니다.
- 해당 설정 값은 브로커를 재 기동해야 적용 할 수 있습니다.
- 예시)
② access_control_file 파일 작성 형식
[%<broker_name>] <db_name>:<db_user>:<ip_list_file> … |
- <broker_name> : 브로커 이름. cubrid_broker.conf에 지정한 브로커 이름 중 하나.
- <db_name> : 데이터베이스 이름. *로 지정하면 모든 데이터베이스를 허용.
- <db_user> : 데이터베이스 사용자 ID. *로 지정하면 모든 데이터베이스 사용자 ID를 허용.
- <ip_list_file> : 접속 가능한 ip 목록을 저장한 파일의 이름. 여러 파일을 쉼표(,)로 구분 가능.
- 예시)
- query_editor 브로커의 접속 허용 범위 :
testdb에 접속하는 모든 사용자가 readonlyip.txt.에 등록된 IP에서만 허용
testdb에 testuser 사용자로 접속할 경우 IPlist.txt에 등록된 IP에서만 허용
모든 데이터베이스에 dba로 접속할 경우 writeip.txt에 등록된 IP에서만 허용
③ ip_list_file 파일 작성 형식
192.168.0.21 10.* * |
- 첫 번째 줄 : 192.168.0.21을 허용
- 두 번째 줄 : 10으로 시작하는 모든 IP를 허용
- 세 번째 줄 : 모든 IP를 허용
④ 이미 구동되어 있는 브로커에 새로운 access_control_file 적용
cubrid broker acl reload <broker_name> |
- 브로커 이름을 생략하면 전체 브로커에 변경 내용을 적용.
- 예시)
⑤ 구동 중인 브로커의 접속 제어 관리 설정 내용 확인
cubrid broker acl status <broker_name> |
- 브로커 이름을 생략하면 전체 브로커의 설정을 출력.
- 예시)
2) 브로커 접속 제어 관리 로그 확인
- 허용되지 않는 IP에서 접근할 경우 브로커 ACCESS_LOG와 SQL_LOG에 기록이 남게 됩니다.
- ACCESS_LOG와 SQL_LOG는 기본적으로 $CUBRID/log/broker 디렉터리 밑에 생성되며, 설정 값에 따라 달라질 수 있습니다.
- ACCESS_LOG의 경우 ACCESS_LOG 파라미터가 ON으로 설정되어 있어야 생성이 됩니다.
- ACCESS_LOG 예시 )
- SQL_LOG 예시 )
CUBRID에서 제공하는 접속 제어 관리 기능을 올바르게 사용하여 외부의 잘못된 접근으로 인하여 발생되는 문제로부터 데이터베이스를 보호하시기를 바랍니다.