때때로 Oracle® Database 슈퍼유저인 sys의 모든 작업을 감사(audit)해야 할 필요가 있습니다. 이러한 요구 사항을 충족하기 위해 Oracle은 버전 9i부터 AUDIT_SYS_OPERATIONS 파라미터를 포함하는 기능을 도입했습니다.
개요
이 파라미터를 true로 설정하면 AUDIT_FILE_DEST 파라미터가 지정한 디렉터리에 파일이 생성되며, 해당 파일에는 sys 사용자의 모든 작업 기록(protocol)이 저장됩니다. 기본적으로 파일에는 sys의 접속 내역만 포함되고, 접속 이후 발생하는 작업은 기록되지 않습니다.
AUDIT_SYS_OPERATIONS=true로 설정하면 sys의 모든 작업이 담긴 감사 파일은 일반적으로 데이터베이스를 설치한 운영체제(OS) 사용자(보통 Oracle 사용자)의 소유가 됩니다. 그런데 sys로 접속할 권한이 있는 사용자는 대부분 OS 수준에서도 Oracle 사용자로 접속할 권한을 갖고 있기 때문에, 보안 관점에서 AUDIT_SYS_OPERATIONS의 효용이 크게 떨어질 수 있습니다. 이를 보완하기 위해 Oracle은 감사 파일의 소유자를 root로 지정할 수 있도록 허용하며, 이렇게 하면 데이터베이스 관리자(DBA)가 파일을 조작하거나 삭제하기가 훨씬 어려워집니다.
OS 수준에서 감사 파일 구성하기
Oracle Real Application Clusters(RAC) 환경에서 OS 수준으로 감사 파일을 구성하려면 다음 단계를 따르십시오.
1단계: 데이터베이스 파라미터 설정
다음 명령어로 데이터베이스 파라미터를 설정합니다:
SQL> alter system set audit_sys_operations=true scope=spfile;
System altered.
SQL> alter system set audit_syslog_level='LOCAL1.WARNING' scope=spfile;
System altered.
SQL> alter system set audit_trail = OS
SCOPE=SPFILE;
System altered.
2단계: RAC 노드 구성
root 권한으로 다음 단계를 수행하여 RAC1 및 RAC2 노드를 구성합니다.
a) 다음 명령어를 실행하여 /etc/rsyslog.conf 파일을 백업합니다:
cp -p /etc/rsyslog.conf /etc/rsyslog.conf.<ITK#>
b) /etc/rsyslog.conf 파일에 다음 줄을 추가합니다:
# Oracle audit <ITK#>
local1.warning /var/log/oracle/db_name_audit.log
3단계: syslog 로거 재시작
다음 명령어를 실행하여 syslog 로거 프로세스를 재시작합니다:
service rsyslog status
service rsyslog restart
service rsyslog status
4단계: RAC 데이터베이스 재시작
RAC1과 RAC2에서 롤링(rolling) 방식으로 RAC 데이터베이스를 재시작합니다.
a) RAC2에서 다음 명령어를 실행합니다:
srvctl stop instance -d DB_NAME -i DB_SID2
srvctl start instance -d DB_NAME -i DB_SID2
srvctl status database -d DB_NAME
b) 10분간 대기합니다.
c) RAC1에서 다음 명령어를 실행합니다:
srvctl stop instance -d DB_NAME -i DB_SID1
srvctl start instance -d DB_NAME -i DB_SID1
srvctl status database -d DB_NAME
5단계: logrotate 파일 설정
RAC1과 RAC2에 logrotate 파일을 설정하려면 root 권한으로 /etc/logrotate.d/oracle_audit 파일을 편집하여 다음 내용을 추가합니다:
/var/log/oracle/db_name_audit.log
{
rotate 12
compress
weekly
dateext
notifempty
missingok
copytruncate
}
Logrotate 주요 파라미터 설명
logrotate 구성 파일에는 다음과 같은 옵션들을 사용할 수 있습니다(Logrotate 공식 문서 및 man 페이지 참고):
Rotate: 보관할 로그 아카이브의 최대 개수(N)를 지정합니다. 디스크 사용량이 적절한 범위라면 크게 설정할 수 있습니다. 로그 용량이 커지는 경우 최근 10일 또는 2주치 로그만 유지하도록 설정할 수도 있습니다.
Compress: 아카이브된 로그를 gzip으로 압축합니다(권장). 압축을 적용하면 원본 로그 대비 파일 크기를 크게 줄일 수 있습니다.
Weekly: 마지막 로테이션 이후 날짜가 최소 7일 이상 경과했을 때 로그 파일을 로테이션합니다(정확한 시각은 무시). 요일 해석 방식은 다음과 같습니다: 0은 일요일, 1은 월요일, 6은 토요일을 의미하며, 특수 값 7은 요일과 관계없이 매 7일마다 로테이션함을 뜻합니다. 요일 인수를 생략하면 기본값은 0입니다.
Yearly: 현재 연도가 마지막 로테이션 연도와 다를 경우 로그 파일을 로테이션합니다.
Dateext: 처리 시점의 날짜를 아카이브 로그 파일명 뒤에 덧붙입니다. 기본 형식은 YYYYMMDD로, 이를 통해 아카이브된 로그를 더 쉽게 검색할 수 있습니다.
Notifempty: 로그 파일이 비어 있으면 아카이브하지 않습니다. 보관 가능한 아카이브 개수가 제한되어 있으므로, 빈 파일이 오래된 아카이브 항목을 밀어내는 것을 방지하는 데 중요합니다.
Missingok: 특정 로그 파일을 찾을 수 없는 경우 오류 없이 구성의 다음 로그 파일로 넘어갑니다. 이 옵션은 하나의 로그 파일이 누락되더라도 logrotate 프로그램이 비정상 종료되지 않도록 보장합니다.
Copytruncate: 로그를 아카이브할 때 logrotate는 로그 파일의 내용을 타임스탬프가 찍힌 별도 파일로 복사한 후, 원본 로그 파일에서 해당 항목을 잘라내거나 삭제합니다. 프로그램이 로그 파일에 지속적으로 기록하는 환경에서 필요한 옵션으로, 프로그램이 계속 같은 로그 파일을 사용하도록 하여 로그 파일 접근 실패로 인한 비정상 종료를 방지합니다.
장점과 단점
감사 기록을 OS의 파일로 기록할 때 고려해야 할 장단점은 다음과 같습니다.
장점:
감사 기록을 root 소유의 파일시스템에 기록하면, 데이터베이스를 설치한 Oracle 사용자조차 해당 내용을 읽거나 수정할 수 없습니다.
단점:
감사 파일을 OS에 저장하면 디스크 공간을 소모하고 성능 문제를 일으킬 수 있습니다. 예를 들어, sys가 catalog.sql 또는 catproc.sql 실행과 같은 대규모 작업을 수행하면 감사 기록이 급증할 수 있습니다.
결론
이 글에서 소개한 단계들을 통해 RAC 데이터베이스의 모든 감사 기록을 OS 파일로 전달할 수 있습니다. Oracle은 특히 초고보안(ultra-secure) 데이터베이스 구성을 사용하는 경우 OS 설정 활용을 권장합니다.
궁금한 점이나 의견이 있다면 피드백 탭을 통해 남겨 주세요. 지금 바로 상담을 시작할 수도 있습니다.
데이터베이스에 대해 더 자세히 알아보세요.