분산된, 미션 크리티컬 애플리케이션의 크기와 복잡도는 계속 증가하는 추세이다.
이러한 애플리케이션을 통해서, 신용카드 정보, 은행 계좌 번호 같은 민감한 정보가 네트워크로 전송되는 경우가 점점 증가하고 있다.


오라클에서는 나날이 증가되는 보안 위협에 대비해서 강력한 보안 기능을 DBMS에 포함하고 있으나 국내의 경우 방화벽 위주의 네트워크 보안이나 OS 보안에만 신경 쓸 뿐 정작 중요한 Data 보안에는 무방비 상태이며 내.외부 인력들에게 보안서약서를 받는 정도의 보안 대책을 마련하고 있을 뿐 근본적 대책이 없는 상황이다.

 

 

(1) Oracle Critical Patch Update 제공 : 오라클 제품의 심각한 보안 결함 발생시 보안 경보 발령 및 신속한 패치 제공


(2) Advanced Security Option : Encryption과 Checksum을 통해 더 높은 수준의 연결 보안과 데이터 보안 제공..

 

①  Encryption : 데이터의 프라이버시 보호
오라클은 다음의 두가지 Encryption 방법을 제공한다. 

 

40, 56, 128 bit 암호화를 지원하는 Data Security 社의 RSA RC4

56 bit 암호화를 지원하는 DES Data 암호화 표준 방식 

 

②  Checksum : 데이터의 변조 방지
체크섬은 전송되는 각각의 패킷에 라벨과 순번을 매겨 네트워크를 통해 전송된 데이터가 중간에 해커에 의해 변경되지 않았음을 확신할 수 있다.
오라클은 이를 위해 Message Digest 5(MD5) Checksum을 제공한다.


(3) 엄격한 권한 관리

①  System Privileges : drop any table, dba 롤 등 중요 권한의 엄격한 관리
②  Database Resource manager : 악의적인 공격으로부터 CPU, I/O 등 중요 자원에 대한 사용량 제한.
계정 분리 : 유저별로 별도 계정 생성 후 적절한 권한 부여 (예) 인사부서에서 회계 정보를 열람하지 못하도록 함.
③  차등적 접근 권한 설정으로 중요 데이터에 대한 접근을 원천 차단
④  SQL*PLUS, Toad등의 Third-party tool로 직접 접근하거나, 기타 언어로 작성한 코드로 Database에 접근할 경우에 대한 대비


(4) 암호 관리: 불필요한 계정 잠금, 암호의 복잡성 만족 규칙(영문자+숫자+특수문자), 암호의 길이 제한


(5) Auditing (감사) : 주요 테이블에 대한 접근 및 변경 기록 유지, create table, drop table 등 주요 system command에 대한 감사.
보안 사고 발생시 변조된 데이터 식별 가능함. 해커 추적이 가능해짐.


(6) View 를 이용한 보안 정책 수립 : 주민번호, 계좌 번호 등 중요한 컬럼에 대한 보안 적용, Column-level 의 보안 제공


(7) DBMS_OBFUSCATION_TOOLKIT : 암호나 신용카드 번호 등 중요 정보에 대한 암호화 제공. DBMS에서 제공하는 기능이므로 특정 개발 언어나 환경에 비 종속적임.
56,112,168 bit의 DES, 3DES 등의 대칭 키 암호화 방식 제공


(8) Label Security & Fine-Grained Access Control(FGAC) : Row-level 의 보안 제공
- 장점 : 애플리케이션이 아닌 DBMS 레벨에서의 보안 정책이므로 다른 도구로 DBMS로 접근하더라도 보안을 유지할 수 있으며 훨씬 안전하다. 보안 정책 변화에 대해서 유연하게 대응이 가능해짐.
테이블이나 뷰를 조회하는 모든 질의에 동적으로 where절을 추가할 수 있게 해준다.
예) 접근하는 유저에 따라서 볼 수 있는 레코드에 제약을 가함.
“SELECT * FROM EMP” 라는 기본 질의를 다음과 같이 DBMS내에서 동적으로 재작성하게 된다. 


사용자

동적으로 재작성된 질의

설명

일반사원

Select *
  from (select * from emp
where ename = USER)

일반 사원은 오직 자신의 행들만 조회가 가능하다.
(타인의 연봉 정보 등 참조 불가)

부서 팀장

Select *
  from ( select *          
               from emp       
          where mgr =
( select empno from emp
where ename = USER )
or ename = USER

부서 팀장은 자신의 팀원들과 자기 자신의 행들만 열람이 가능하다.
(타 부서나 자신의 상급자 정보는 열람 불가)

인사 관리자

Select *
  from (select *     
              from emp   
          where deptno = (SYS_CONTEXT(‘OutApp’,
 ‘ptno’))

인사 관리자는 주어진 부서의 모든 사람들의 행을 볼 수 있다.