안녕하세요 Thinking Man 입니다.
이번 글에서는 Audit Trail 을 관리하는 방법 중 DB Audit Trail 관리 방법에 대해 알아보도록 하겠습니다.
이번 글을 읽게 되면 DB Audit Trail 테이블의 사이즈 관리, 테이블스페이스 이관 및 수동으로 Archiving 하는 방법 등에 대해서 알 수 있습니다.
이 글은 Oracle 11gR2 공식 문서를 참고하여 작성하였습니다.
Audit Trail 관리
이번 글에서는 아래의 내용을 다룰 예정입니다.
- 감사 레코드
- DB Audit Trail 관리
감사 레코드
감사 레코드에는 감사를 유발한 사용자, 해당 작업 일자와 시간이 기록됩니다. 지정한 감사 유형에 따라서 감사 데이터는 DB의 테이블에 저장되거나 운영체제에 파일로 저장됩니다.
OS 감사가 아닌 경우 감사 레코드를 데이터베이스 테이블에 저장하며 표준 감사 레코드는 SYS.AUD$ 테이블에 상세 감사 레코드는 SYS.FGA_LOG$ 테이블에 저장합니다. 이 2개 테이블은 SYS 유저의 소유이며 SYSTEM 테이블스페이스 영역에 저장됩니다. SYS 테이블이 아닌 Dictionary View를 통해서도 감사 데이터 확인이 가능한데 내용은 아래와 같습니다.
- 표준 감사 테이블 AUD$ 데이터를 확인하려면 DBA_AUDIT_TRAIL
- 상세 감사 테이블 FGA_LOG$ 데이터를 확인하려면 DBA_FGA_AUDIT_TRAIL
- AUD$, FGA_LOG$ 모든 데이터를 확인하고자 한다면 DBA_COMMON_AUDIT_TRAIL
감사 레코드를 OS에 기록하고자 한다면 텍스트 파일과 XML 파일 중 하나의 타입으로 저장할 수 있습니다. OS의 XML 파일의 데이터를 확인하고자 한다면 DB에서 V$XML_AUDIT_TRAIL View를 조회하면 감사 레코드를 확인 할 수 있습니다.
DB Audit Trail 관리
이 챕터에서는 아래의 내용을 다룰 예정입니다.
- DB Audit Trail
- DB Audit Trail 사이즈 관리
- DB Audit Trail 테이블스페이스로 이관
- DB Audit Trail 보관
DB Audit Trail
Database Audit Trail 은 SYS 계정의 AUD$ 테이블(표준 감사), FGA_LOG$(상세 감사) 2개의 테이블에 기록됩니다. 이 2개 테이블의 데이터를 기반으로 보여지는 Dictionary View가 있으며 Audit Trail에 관련된 View 에 대한 상세내용은 다음 글에서 다루어 보도록 하겠습니다. Dictionary View 들은 Oracle 의 버전에 따라서 변경될 수가 있으니 이점도 참고하십시오.
DB Audit Trail 레코드는 감사 옵션에 따라서 기록되는 정보가 추가 될 수 있습니다. AUDIT_TRAIL 매개변수에 “DB, EXTENDED” 또는 “XML, EXTENDED” 로 설정한다면 감사 테이블의 SQL_BIND 컬럼, SQL_TEXT 컬럼에 감사 작동 시 사용된 SQL 구문과 바인드 변수 값이 기록됩니다.
AUDIT_TRAIL 변수가 “XML” 이거나 “XML, EXTENDED” 일 경우에는 감사 데이터를 OS 의 XML 파일 형식으로 저장합니다. XML 은 표준 문서 형식이기 때문에 Oracle에서 XML 데이터를 파싱하고 분석할 수 있는 유틸리티를 사용할 수 있습니다.
감사 데이터가 저장되는 DB의 Tablespace가 가득 찬 경우 Audit Trail 은 작업을 완료 할 수 없습니다. 이때 Oracle은 에러 메시지를 Alert Log에 기록하고 감사 작업을 중단합니다. 이런 상황을 대비하기 위해서 Audit Trail의 저장되는 정보의 양을 조절하여 관리할 필요가 있습니다. 이 방법에 대해서는 아래의 “DB Audit Trail 사이즈 관리” 를 확인해 보시기 바랍니다.
Audit Trail은 감사가 진행된 SQL문의 데이터의 결과 값은 저장하지 않습니다. 예로 UPDATE 문에 감사가 진행되었을 때 UPDATE 이전의 데이터나 새로운 데이터의 값은 저장이 되지 않습니다. 상세 감사를 활용하면 데이터 값 역시 감사할 수 있으며 이때 Flashback Query 를 사용하여 이를 가능하게 할 수 있습니다. Flashback Query 에 대한 내용은 추후에 상세히 다루도록 하겠습니다.
DB Audit Trail 사이즈 관리
감사 데이터가 Full로 차서 더 이상 감사 데이터를 기록할 수 없는 경우에는 감사 데이터를 삭제하기 전까지 감사 데이터를 저장할 수 없습니다. 이때 Oracle은 감사가 작동하게 한 SQL을 실행한 사용자들에게 에러를 출력합니다. 이러한 상황을 예방하기 위해서 감사 데이터의 증가율과 사이즈를 체크하고 관리해야 합니다.
감사가 활성화 되어 있는 동안 감사 데이터는 주로 아래의 두 요인에 의해서 증가합니다.
- 활성화된 감사 옵션의 수
- 감사된 명령문의 실행 빈도
감사 데이터의 증가를 관리하기 위해서는 아래와 같은 방안이 있습니다.
- 감사를 비활성화. 감사를 활성화하면 감사 데이터가 생성되므로 감사 데이터 관리 차원에서 일시적으로 비활성화를 할 수 도 있고 아래 상세감사를 사용하여 감사 데이터 증가율을 감소시킬 수 있습니다.
- 디테일한 감사 옵션 사용. 감사를 디테일하게 수행하면 불필요한 감사 데이터가 생성되지 않습니다. 상세감사를 사용하여 조건을 상세하게 설정하여 감사 데이터의 양을 줄일 수 있습니다.
- 감사 권한 및 Session 권한 제어.
- 감사를 수행할 수 있는 보안 관리자만이 DB Object 를 소유하고 AUDIT ANY 권한을 갖음. (감사 가능한 유일한 사용자임)
- AUDIT ANY 시스템 권한을 다른 사용자에게 주지 않도록 함. (보안관리자를 제외한 일반 사용자는 감사 활성화 불가능)
- 모든 테이블, 뷰 등의 Object 들을 CREATE SESSION 권한이 없는 스키마에 생성.
DB Audit Trail과 관련된 테이블 AUD$, FGA_LOG$ 는 Default로 SYSTEM 테이블스페이스에 저장되며 최대 사이즈는 테이블스페이스의 저장 매개변수에 따라 결정됩니다.
감사 데이터가 많이 쌓여있거나 발생 빈도가 잦을경우 SYSTEM 테이블스페이스에 저장되어 있는 Oracle 내부 테이블들에도 성능적인 영향이 발생할 수 있습니다. 이를 고려하여 감사 테이블들을 다른 테이블스페이스로 옮길수 도 있습니다.
DB Audit Trail 테이블스페이스 이관
감사 테이블 SYS.AUD$, SYS.FGA_LOG$ 테이블은 SYSTEM 테이블스페이스에 기본적으로 저장되는데 감사데이터 저장으로 인해 SYSTEM 테이블스페이스 사용률이 증가하거나 BUSY 한 경우 또는 감사 테이블을 삭제하고자 할 경우 SYSAUX TBS나 사용자가 생성한 일반 TBS로 변경할 수 있습니다.
감사 테이블을 다른 테이블스페이스로 이동하는 작업은 감사 데이터의 양에 따라 오랜 시간이 걸릴 수 있기 때문에 업무 외 시간에 작업을 하는 것을 추천드립니다.
SYSTEM TBS 에서 다른 TBS로 이동하고자 할 때
- DBMS_AUDIT_MGMT 패키지에 EXECUTE 권한을 가진 사용자로 SQL*Plus 로그인 (DBMS_AUDIT_MGMT 패키지 상세정보)
- 감사 테이블을 이동하려는 TBS를 미리 생성 및 확인
- DBMS_AUDIT_MGMT 패키지 내의 SET_AUDIT_TRAIL_LOCATION 프로시저를 수행하여 이동할 TBS 지정하여 감사 테이블 이동
예제) SYSAUX_AUD 라는 사용자가 만든 TBS로 표준 감사 테이블 이동
BEGIN DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, AUDIT_TRAIL_LOCATION_VALUE => 'SYSAUX_AUD'); END;
이 예에서:
- AUDIT_TRAIL_TYPE : 이동할 감사 유형을 설정. 아래의 값 중 하나 입력 가능.
– DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD : 표준 감사 테이블인 AUD$ 를 이동
– DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD : 상세 감사 테이블인 FGA_LOG$를 이동
– DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD : 표준 및 상세 감사 테이블 모두 이동
- AUDIT_TRAIL_LOCATION_VALUE : 감사 테이블을 이동할 TBS를 지정.
DB Audit Trail Archiving
감사 데이터가 지속적으로 쌓이기만 하여 방대해지지 않도록 주기적인 아카이빙 작업이 필요하고 그 후 감사 데이터를 삭제하여 공간을 확보해야 합니다. 감사 데이터를 삭제하는 방법은 추후에 작성할 예정입니다.
DB Audit Trail 을 아카이빙 하려면 아래의 방법들이 있습니다.
- Oracle Audit Vault 를 활용한 아카이빙. Oracle Audit Vault는 오라클 DB와는 별도로 설치해야 합니다.
- Oracle Data Warehouse 를 활용한 아카이빙. Oracle Data Warehouse 오라클 DB와 같이 설치할 수 있습니다.
- 수동으로 아카이빙 할 데이터를 일반 테이블로 복제.
아카이빙을 완료 후에 감사 데이터를 삭제하면 됩니다.
아래는 위의 아카이빙 방법 중 일반 테이블을 생성하여 해당 테이블로 표준감사,상세감사 테이블을 복제하는 예제입니다.
INSERT INTO table SELECT ... FROM SYS.AUD$ WHERE ...; INSERT INTO table SELECT ... FROM SYS.FGA_LOG$ WHERE ...;
같이 읽으면 좋은 글
> Oracle Fine Grained Auditing 2편 (DBMS_FGA 패키지 활용법)
> Oracle Fine Grained Auditing 1편 (상세감사)
> Oracle 보안 관리 Audit 10편 (Directory, Function, Procedure, Package, Trigger)
2 thoughts on “Audit Trail 관리 1편(DB Audit Trail 관리)”
Comments are closed.