베어메탈 솔루션 Oracle의 Oracle 데이터베이스 감사
개요
데이터베이스 감사는 데이터베이스에서 수행된 작업의 기록, 모니터링, 보고 프로세스입니다. 보안 감사관은 데이터베이스 사용자가 설정된 정책에 따라 데이터베이스를 사용하고 있으며 정책 위반이 없는지 관찰할 수 있습니다.
베어메탈 솔루션 서버에서 호스팅되는 Oracle 데이터베이스는 모든 Oracle 표준 감사 절차를 제한 없이 온프레미스 환경으로 지원합니다. 비즈니스 요구사항에 따라 감사 정책을 설정해야 합니다.
이 페이지에서는 Oracle 베어메탈 솔루션에서 지원되는 감사 정책과 감사 로그 관리에 대해 설명합니다. 또한 필요한 경우 Cloud Storage 버킷을 사용하여 이전 감사 로그를 보관처리하는 방법도 설명합니다.
1. SYS 사용자 작업 감사
이 섹션은 SYS/SYSDBA/SYSOPER에서 수행된 활동을 감사하려는 데이터베이스 관리자가 참조할 수 있도록 작성되었습니다.
audit_sys_operations 매개변수는 OS 감사 추적 파일에서 SYS/SYSDBA/SYSOPER가 발급한 모든 문에 대한 감사를 허용합니다. SYS 사용자의 감사를 사용 설정하려면 audit_sys_operations
파라미터를 TRUE
로 설정해야 합니다.
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ------------------------------
audit_file_dest string /apps/oracle/oracle_base/admin
/dbrman/adump
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB
unified_audit_common_systemlog string
unified_audit_sga_queue_size integer 1048576
unified_audit_systemlog string
audit_sys_operations
매개변수를 설정한 후 audit_file_dest
로 지정된 디렉터리 위치의 감사 파일에서 모든 sys 수준 감사 세부정보를 사용할 수 있습니다.
다음 예시는 sys에서 샘플 사용자를 만드는 방법을 보여줍니다.
[oracle@svr002 adump]$ sqlplus / as sysdba
SQL> create user audit_test identified by abcd1234;
audit_file_dest
디렉터리에서 관련 감사 로그를 확인합니다. 이 예시에는 데이터베이스 사용자 /
가 OS 사용자 oracle
및 sysdba
권한을 가지고 수행하는 2가지 감사 작업(인결 및 사용자 만들기)이 있습니다.
[oracle@svr002 ~]$ cd /apps/oracle/oracle_base/admin/dbrman/adump
[oracle@svr002 adump]$ ls -ltr
[oracle@svr002 adump]$ more dbrman_ora_12088_20211113064923842865549602.aud
Fri Nov 13 06:49:23 2021 +00:00
LENGTH : '268'
ACTION :[7] 'CONNECT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/4'
STATUS:[1] '0'
DBID:[10] '3990895662'
SESSIONID:[10] '4294967295'
USERHOST:[17] 'svr002'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[3] '100'
Fri Nov 13 06:49:55 2021 +00:00
LENGTH : '299'
ACTION :[38] 'create user audit_test identified by *'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/4'
STATUS:[1] '0'
DBID:[10] '3990895662'
SESSIONID:[10] '4294967295'
USERHOST:[17] 'svr002'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[2] '51'
2. 데이터베이스 표준 감사
감사는 11g 이후부터는 기본적으로 사용 설정됩니다. 데이터베이스 감사는 audit_trail
매개변수를 다음 표의 값 중 하나로 설정하여 구성합니다.
매개변수 | 설명 |
없음 | 감사가 사용 중지됨 |
DB | 감사가 사용 설정되고 감사 데이터가 SYS.AUD$ 테이블에 기록됩니다. |
DB,EXTENDED | DB로 작동하며 SQL_TEXT 및 SQL_BIND 열도 채웁니다. |
OS | 감사가 사용 설정됨. Unix에서 감사 데이터는 audit_file_dest를 통해 지정된 디렉터리에 있는 텍스트 파일에 기록됩니다. Windows에서는 감사 데이터가 이벤트 뷰어로 전송됩니다. |
XML | 감사가 사용 설정되고 audit_file_dest를 통해 지정된 디렉터리에 있는 XML 파일에 감사 데이터가 기록됩니다. 이는 Windows뿐만 아니라 Unix에도 해당됩니다. |
XML,EXTENDED | XML로 작동하며 SQL_TEXT 및 SQL_BIND 열도 채웁니다. |
audit_trail
을 요구사항에 맞게 위의 옵션으로 설정하고 SYS.AUD$
테이블 또는 audit_file_dest
디렉터리에서 생성된 감사 파일에서 감사된 활동을 확인할 수 있습니다.
다음 예시에서는 사용자 audit_test
가 모든 문 감사를 사용 설정하고 사용자가 수행한 모든 작업을 로깅합니다.
SQL> audit create table by audit_test;
Audit succeeded.
SQL> audit all by audit_test by access;
Audit succeeded.
SQL> conn audit_test
Enter password:
Connected.
SQL> show user
USER is "AUDIT_TEST"
SQL>
SQL> create table test (name char);
Table created.
SQL> insert into test values ('a');
1 row created.
SQL> exit
[oracle@svr002 adump]$ sqlplus / as sysdba
SQL> SELECT username,extended_timestamp,owner,obj_name,action_name FROM dba_audit_trail where owner='AUDIT_TEST' order by timestamp;
USERNAME EXTENDED_TIMESTAMP OWNER OBJ_NAME ACTION_NAME
--------- ------------------- ----------- --------- ------------
AUDIT_TEST 13-NOV-20 07.43.19.361519 AM + AUDIT_TEST TEST CREATE TABLE
00:00
AUDIT_TEST 13-NOV-20 07.43.34.679913 AM + AUDIT_TEST TEST INSERT
00:00
또한, 특정 권한만 가진 특정 객체의 감사를 사용 설정할 수 있으며, 이 경우 해당 객체의 감사 정보만 로깅됩니다. 다음 예시에서는 AUDIT1.abcd
테이블의 select
및 delete
에 감사가 사용 설정되어 있습니다. 삽입, 선택, 삭제 작업이 테이블에서 실행됩니다. select
및 delete
만 감사되므로 삽입 작업은 감사 테이블에 로깅되지 않습니다.
SQL> create user audit1 identified by abcd1234;
User created.
SQL> conn audit1
Enter password:
Connected.
SQL> create table abcd (id char);
Table created.
SQL> exit
[oracle@svr002 adump]$ sqlplus / as sysdba
SQL> audit select,delete on audit1.abcd;
Audit succeeded.
SQL> conn audit1
Enter password:
Connected.
SQL> insert into abcd values ('a');
1 row created.
SQL> /
1 row created.
SQL> select * from abcd;
I
-
a
a
SQL> delete from abcd;
2 rows deleted.
SQL> column username format a9
column owner format a5
column obj_name format a10
column action_name format a11
column sql_text format a40SQL> SQL> SQL> SQL>
SQL> select username, owner, obj_name,action_name from dba_audit_trail where owner='AUDIT1';
USERNAME OWNER OBJ_NAME ACTION_NAME
------------------- ---------- --------------
AUDIT1 AUDIT1 ABCD SELECT
AUDIT1 AUDIT1 ABCD DELETE
3. Oracle 데이터베이스 통합 감사
통합 감사는 Oracle 12c의 새로운 기능입니다. 12c부터는 Oracle 데이터베이스가 기본적으로 혼합 모드 감사를 사용하므로 Oracle 표준 감사와 통합 감사 일부 감사 정책이 모두 사용 설정됩니다.
기본적으로 새 Oracle 12c 데이터베이스 이상 버전을 설치할 때 V$option
에서 False
로 설정된 통합 감사를 볼 수 있지만 unified auditing
이 사용 중지되었음을 의미하지는 않습니다. 통합 감사는 False
로, audit_trail
은 DB
로 설정하면 데이터베이스가 혼합 모드 감사를 사용한다는 의미입니다.
SQL> select parameter , value from v$option where PARAMETER = 'Unified Auditing';
PARAMETER VALUE
-------------------- --------------------
Unified Auditing FALSE
SQL> show parameter audit_trail
NAME TYPE VALUE
------------------------------------ -----------
audit_trail string DB
혼합 모드 감사는 통합 감사로 완전히 이동하고 데이터베이스 표준 감사를 중지하기 전에 통합 감사에 대해 알아볼 기회를 제공합니다. 혼합 모드 감사에서는 기본적으로 ORA_SECURECONFIG
및 ORA_LOGON_FAILURES
라는 두 가지 통합 감사 정책이 사용 설정됩니다. 이러한 정책은 통합 감사가 혼합 모드에서 사용 설정되었음을 나타냅니다.
SQL> select policy_name,enabled_option from AUDIT_UNIFIED_ENABLED_POLICIES;
POLICY_NAME ENABLED_OPTION
-------------------- ---------------
ORA_SECURECONFIG BY USER
ORA_LOGON_FAILURES BY USER
3.1 혼합 모드에서 통합 감사 사용 중지
혼합 모드에서는 두 정책(ORA_SECURECONFIG
및 ORA_LOGON_FAILURES
)을 사용하여 통합 감사가 사용 설정됩니다. 통합 감사를 사용 중지하고 데이터베이스에서 표준 감사를 사용하도록 하려면 다음 명령어를 실행합니다.
SQL> noaudit policy ORA_SECURECONFIG;
Noaudit succeeded.
SQL> noaudit policy ORA_LOGON_FAILURES;
Noaudit succeeded.
SQL> select policy_name,enabled_option from AUDIT_UNIFIED_ENABLED_POLICIES;
no rows selected
3.2 순수 통합 감사 사용 설정
기본 혼합 모드 감사에서 벗어나 순수 통합 감사만 사용하려면 다음 명령어를 실행하면 됩니다.
SQL> alter system set audit_trail='NONE' scope=spfile;
System altered.
QL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
[oracle@svr002 ~]$ cd $ORACLE_HOME/rdbms/lib
[oracle@svr002 lib]$ make -f ins_rdbms.mk uniaud_on ioracle
SQL> startup
ORACLE instance started.
Total System Global Area 6442448984 bytes
Fixed Size 8910936 bytes
Variable Size 1140850688 bytes
Database Buffers 5284823040 bytes
Redo Buffers 7864320 bytes
Database mounted.
Database opened.
SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
VALUE
----------------------------------------------------------------
TRUE
3.3 Oracle 통합 감사 사용
통합 감사를 사용하면 감사 옵션을 간단한 감사 정책으로 그룹화할 수 있습니다.
여러 권한을 가진 자체 감사 정책을 만들 수 있습니다. 다음 예시에서는 사용자에게 create
table
권한이 있는지 감사하는 간단한 감사 정책을 만듭니다.
SQL> create AUDIT POLICY policy_for_auditor PRIVILEGES create table WHEN 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') = ''UNIFIED_AUDIT''' EVALUATE PER SESSION;
Audit policy created.
SQL> audit policy policy_for_auditor;
Audit succeeded.
SQL> conn unified_audit
Enter password:
Connected.
SQL> create table test (id char);
SQL> exit
[oracle@svr002 lib]$ sqlplus / as sysdba
SQL> COLUMN event_timestamp FORMAT A30
SQL> COLUMN dbusername FORMAT A10
SQL> COLUMN action_name FORMAT A20
SQL> COLUMN object_schema FORMAT A10
SQL> COLUMN object_name FORMAT A20
SQL> SELECT event_timestamp,dbusername,action_name,object_schema,object_name FROM unified_audit_trail WHERE dbusername ='UNIFIED_AUDIT';
EVENT_TIMESTAMP DBUSERNAME ACTION_NAME OBJECT_SCHEMA OBJECT_NAME
------------------------------ ---------- --------------- --------------- ----------
19-NOV-20 06.03.40.001665 AM UNIFIED_AUDIT CREATE TABLE UNIFIED_AUDIT TEST
4. Oracle BMS에서 감사 로그 유지보수
audit_trail
매개변수가 DB
또는 DB,EXTENDED
로 설정된 경우 감사 로그는 SYSTEM Tablespace
에 있는 SYS.AUD$
테이블에 기록됩니다.
SYS.AUD$
테이블이 커지면 SYSTEM tablespace
의 공간이 소진됩니다.
audit_trail
매개변수가 OS,XML
로 설정된 경우 감사 로그는 audit_file_dest
디렉터리에 저장된 OS 파일에 기록됩니다.
감사 로그 누적 및 부적절한 삭제도 파일 시스템을 잡아먹을 수 있습니다. SYS.AUD$
테이블 또는 audit_file_dest
디렉터리를 주기적으로 정리해야 합니다. 통합 감사에서는 감사 레코드도 AUD$UNIFIED
로 작성됩니다. 삭제하려면 다음 중 하나를 수행하면 됩니다.
audit_trail
테이블을 SYSTEM 테이블스페이스의 공간을 지우는 새 테이블스페이스로 옮깁니다.DBMS_AUDIT_MGMT.create_purge_job
프로세스를 사용하여 테이블스페이스 및 감사 로그가 포함된 디렉터리를 주기적으로 정리하세요.
4.1 audit_trail
테이블을 새 테이블스페이스로 이동
SQL> select table_name, tablespace_name from dba_tables where table_name='AUD$';
TABLE_NAME TABLESPACE_NAME
-------------------- ------------------------------
AUD$ SYSTEM
SQL> create tablespace audit_trail datafile '/apps/oracle/oracle_base/oradata/DBRMAN/audit.dbf' size 5M autoextend on;
Tablespace created.
SQL> begin
dbms_audit_mgmt.set_audit_trail_location(
audit_trail_type => dbms_audit_mgmt.audit_trail_aud_std,
audit_trail_location_value => 'AUDIT_TRAIL');
end;
/ 2 3 4 5 6
PL/SQL procedure successfully completed.
SQL> Select table_name, tablespace_name from dba_tables where table_name='AUD$';
TABLE_NAME TABLESPACE_NAME
-------------------- ------------------------------
AUD$ AUDIT_TRAIL
4.2 이전 감사 추적 데이터 삭제
감사 로그를 삭제하기 전에 사용 사례에 따라 로그를 보관처리했는지 확인해야 합니다. 특정 기간 동안에만 감사 레코드를 유지할 수 있으며, 이 경우 삭제 작업을 예약하는 대신 보관을 수행할 필요가 없습니다.
다음 절차는 표준 감사와 통합 감사 모두에 작동합니다.
10일이 지난 감사 로그를 GCS 버킷에 복사(선택사항)
Audit_Trail=OS를 사용하는 고객은 모든 감사 로그가 audit_file_dest
디렉터리에 저장됩니다. 고객은 커스텀 스크립트와 함께 gcloud storage cp
를 사용하여 10일보다 오래된 파일을 찾아 Cloud Storage 버킷으로 이동할 수 있습니다. 다음은 예시 스크립트입니다.
#!/bin/sh
find /apps/oracle/oracle_base/admin/dbrman/adump -type f -mtime +10 | while read line
do
gcloud storage cp $line gs://oracle_backup_psoracle/audit
done
고객은 위의 스크립트를 사용할 수 있을 뿐 아니라, 커스텀 스크립트를 준비하고 크론을 사용하여 보관처리용 스크립트를 매일 예약할 수 있습니다. 오래된 감사 레코드를 보존하지 않으려는 고객은 이 프로세스를 건너뛰어도 됩니다.
다음 예시에서는 자동 삭제 작업을 만들어서 매일 실행하고 10일이 지난 감사 로그를 삭제하는 방법을 보여줍니다.
1단계: 감사 인프라 초기화 및 기본 간격 10일 설정
SQL> begin
DBMS_AUDIT_MGMT.init_cleanup(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
default_cleanup_interval => 240 /* hours */);
END;
/
PL/SQL procedure successfully completed.
SQL > select * from dba_audit_mgmt_config_params where PARAMETER_NAME='DEFAULT CLEAN UP INTERVAL';
PARAMETER_NAME PARAM AUDIT_TRAIL
------------------------- ----- --------------------
DEFAULT CLEAN UP INTERVAL 240 STANDARD AUDIT TRAIL
DEFAULT CLEAN UP INTERVAL 240 FGA AUDIT TRAIL
DEFAULT CLEAN UP INTERVAL 240 OS AUDIT TRAIL
DEFAULT CLEAN UP INTERVAL 240 XML AUDIT TRAIL
2단계: 일일 보관처리 타임스탬프 작업 만들기
이 작업은 이전 감사 레코드를 삭제하는 동안 사용할 타임스탬프를 10일로 지정합니다.
SQL> begin
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'DAILY_AUDIT_ARCHIVE_TIMESTAMP',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(AUDIT_TRAIL_TYPE =>
DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,LAST_ARCHIVE_TIME => sysdate-10); END;',
start_date => sysdate,
repeat_interval => 'FREQ=HOURLY;INTERVAL=24',
enabled => TRUE,
comments => 'Create an archive timestamp'
);
END;
/ 2 3 4 5 6 7 8 9 10 11 12 13
PL/SQL procedure successfully completed.
SQL > select AUDIT_TRAIL, LAST_ARCHIVE_TS, DATABASE_ID from dba_audit_mgmt_last_arch_ts;
AUDIT_TRAIL LAST_ARCHIVE_TS DATABASE_ID
-------------------- ----------------------------------- -----------
STANDARD AUDIT TRAIL 07-NOV-20 07.37.34.000000 AM +00:00 3990895662
3단계: LAST_ARCHIVE_TS
이전의 모든 데이터를 삭제하기 위한 일일 삭제 작업 만들기
SQL> begin
DBMS_AUDIT_MGMT.CREATE_PURGE_JOB(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
AUDIT_TRAIL_PURGE_INTERVAL => 24 /* hours */,
AUDIT_TRAIL_PURGE_NAME => 'Daily_Audit_Purge_Job',
USE_LAST_ARCH_TIMESTAMP => TRUE
);
END;
/
Commit;
SQL> col JOB_NAME FOR a30
SQL> col JOB_FREQUENCY FOR a40
SQL> select JOB_NAME,JOB_STATUS,AUDIT_TRAIL,JOB_FREQUENCY from DBA_AUDIT_MGMT_CLEANUP_JOBS;
JOB_NAME JOB_STAT AUDIT_TRAIL JOB_FREQUENCY
---------------------- -------- -------------------- ------------------------
DAILY_AUDIT_PURGE_JOB ENABLED STANDARD AUDIT TRAIL FREQ=HOURLY;INTERVAL=24
4단계: dba_scheduler_jobs
를 확인하여 새로 생성된 DAILY_AUDIT_ARCHIVE_TIMESTAMP
, DAILY_AUDIT_PURGE_JOB
및 해당 일정을 확인합니다.
SQL> col next_run_date FOR a50
SQL> select job_name, next_run_date, state, enabled from dba_scheduler_jobs where job_name like '%AUDIT%';
JOB_NAME NEXT_RUN_DATE STATE ENABLED
------------------------------ ------------------------------ --------- --------
DAILY_AUDIT_ARCHIVE_TIMESTAMP 18-NOV-20 07.37.33.000000 AM + SCHEDULED TRUE
00:00
DAILY_AUDIT_PURGE_JOB 18-NOV-20 07.44.35.744657 AM SCHEDULED TRUE
TC/UTC