프린트 하기

내맘대로긍정이 알려주는

Oracle 23ai 신기능
무료 세미나 발표자료

다운로드 trending_flat

OS환경 : Oracle Linux 6.8, 7.2 (64bit)


DB 환경 : Oracle Database 11.2.0.4, 12.2.0.1


방법 : 오라클 audit (감사) 정리 및 테스트

AUDITING 기능은 사용자의 행동을 감시하거나 데이타베이스에 관한 통계자료를 얻는 목적으로 사용됨

AUDITING 기능을 사용함으로써 누가 어떤 테이블을 언제 사용하고, 언제 어떤 작업을 하는지를 기록할 수 있음

하지만 레코드에 대한 AUDITING 은 불가능하며 AUDITING 을 걸게 되면 시스템에 부하를 줄 수도 있기 때문에 

자주 사용되는 기능은 아니지만 대부분 국가 정보보안 기본지침에 따라서 설정함

그리고 AUDITING 에서 제공되지 않는 기능은 사용자가 트리거를 만들어서 구현을 해야함


AUDIT의 활성화 방법

  - initSID.ora 파일에 AUDIT_TRAIL 파라미터를 추가하고 DB 재기동

  - spfile 일 경우 alter system 명령으로 AUDIT_TRAIL 파라미터를 변경후 DB 재기동



audit 로그파일 삭제(정리) 에대한 내용은 아래 게시물 참조

오라클 audit 로그 정리 방법( https://positivemh.tistory.com/220 )



AUDIT_TRAIL 파라미터의 값 적용방법

기존파라미터 확인

1
2
3
4
5
6
7
8
9
SQL> show parameter audit
 
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest              string     /oracle/app/oracle/admin
                         /ORCL11/adump
audit_sys_operations             boolean     FALSE
audit_syslog_level             string
audit_trail                 string     DB

현재 Audit_trail이 DB임 



Audit_trail OS로 변경

1
2
3
SQL> alter system set audit_trail=OS scope=spfile;
 
System altered.



db 재기동

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
 
Total System Global Area 1553305600 bytes
Fixed Size            2253544 bytes
Variable Size         1174408472 bytes
Database Buffers      369098752 bytes
Redo Buffers            7544832 bytes
Database mounted.
Database opened.



확인

1
2
3
4
5
6
7
8
9
SQL> show parameter audit
 
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest              string     /oracle/app/oracle/admin
                         /ORCL11/adump
audit_sys_operations             boolean     FALSE
audit_syslog_level             string
audit_trail                 string     OS

audit_trail 이 OS로 변경됨



OS 파일 확인

1
2
3
4
5
6
7
8
9
10
11
SQL> !ls -al /oracle/app/oracle/admin/ORCL11/adump
total 132
drwxr-x---. 2 oracle dba 36864 Mar 17 07:43 .
drwxr-x---. 6 oracle dba  4096 Feb 18 03:07 ..
-rw-r--r--. 1 oracle dba    57 Feb  4 06:28 afiedt.buf
-rw-r-----. 1 oracle dba   837 Mar 16 21:29 ORCL11_ora_23888_20200316212936331911143795.aud
-rw-r-----. 1 oracle dba  1034 Mar 16 21:32 ORCL11_ora_23906_20200316213154724802143795.aud
-rw-r-----. 1 oracle dba   793 Mar 16 21:32 ORCL11_ora_23907_20200316213217029639143795.aud
-rw-r-----. 1 oracle dba   827 Mar 16 21:32 ORCL11_ora_23907_20200316213218880807143795.aud
-rw-r-----. 1 oracle dba   833 Mar 16 21:32 ORCL11_ora_23942_20200316213218932431143795.aud
-rw-r-----. 1 oracle dba  1034 Mar 16 21:32 ORCL11_ora_23947_20200316213223051670143795.aud



AUDIT_TRAIL 파라미터의 값 설명

1. none

audit을 비활성화함

initSID.ora 파일에 AUDIT_TRAIL 매개 변수가 설정되지 않았거나 

데이터베이스 구성 지원 이외의 방법을 사용하여 데이터베이스를 작성한 경우이 값이 기본값임

Database Configuration Assistant(DBCA)를 사용하여 데이터베이스를 작성한 경우 기본값은 db임



2. os

audit 결과를 OS에 파일로 생성을 함

AUDIT_FILE_DEST파라미터에 지정된 디렉토리에 텍스트 파일로 생성됨



3. db(true)

OS에 저장되는 audit trail 결과를 제외하고 audit 결과를 데이터베이스 audit trail(SYS.AUD$ 테이블)으로 보냄

관리 효율성을 위해 일반 데이터베이스에 이 설정을 사용하라고 docs 에 나와있음

DB대신 TRUE로 지정을 해도됨



AUDIT_TRAIL이 db로 설정된 상태에서 데이터베이스가 읽기 전용 모드로 시작된 경우 Oracle Database는 내부적으로 AUDIT_TRAIL을 os로 설정함, 자세한 내용은 alert log를 확인해야함



SYS.AUD$ 테이블에서 얻을 수 있는 정보는 매우 많은데 대표적인 것으로 다음을 들 수 있음

    - USER NAME : 오라클 유저 이름

    - SESSION ID : 오라클 세션 ID

    - TERMINAL ID : 유닉스 시스템 상의 터미날 ID

    - OBJECT NAME : 테이블, 뷰 등의 이름

    - ACTION ID : 명령 코드

    - DATE : 명령이 실행된 날짜,시간

    - COMPLETION CODE : 0 이면 성공, 실패하면 에러 코드



AUDIT_TRAIL을 db로 설정 했을 때

11g Audit 정보는 SYS.AUD$, FGA는 SYS.FGA_LOG$ 테이블에 저장됨 (Tablespace : SYSTEM)

1
2
3
4
5
6
7
8
9
10
SQL>
select tablespace_name, segment_name
from dba_segments
where owner = 'SYS'
and segment_name in ('AUD$','FGA_LOG$')
/
TABLESPACE_NAME            SEGMENT_NAME
----------------- ---------------------------
SYSTEM               FGA_LOG$
SYSTEM               AUD$



11g에서 AUDSYS.AUD$UNIFIED, SYS.AUD$, SYS.FGA_LOG$ 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SQL> select count(*from audsys.AUD$UNIFIED;
select count(*from audsys.AUD$UNIFIED
                            *
ERROR at line 1:
ORA-00942table or view does not exist
 
 
SQL> select count(*from sys.AUD$; 
 
  COUNT(*)
----------
    29
 
SQL> select count(*from sys.FGA_LOG$;
 
  COUNT(*)
----------
     0



12c Unified Audit 정보는 AUSSYS.AUD$UNIFIED 에 저장됨 (Tablespace : SYSAUX)

1
2
3
4
5
6
7
8
9
10
11
12
SQL>
select tablespace_name, segment_name
from dba_segments
where owner = 'AUDSYS'
and segment_name='AUD$UNIFIED'
/
 
TABLESPACE_NAME            SEGMENT_NAME
----------------- ---------------------------
SYSAUX                   AUD$UNIFIED
SYSAUX                   AUD$UNIFIED
SYSAUX                   AUD$UNIFIED



12c에서 AUDSYS.AUD$UNIFIED, SYS.AUD$, SYS.FGA_LOG$ 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL> select count(*from audsys.AUD$UNIFIED
 
  COUNT(*)
----------
    10
 
SQL> select count(*from sys.AUD$; 
 
  COUNT(*)
----------
     0
 
SQL> select count(*from sys.FGA_LOG$;
 
  COUNT(*)
----------
     0



4. db, extended

AUDIT_TRAIL = db의 모든 조치를 수행하고 사용 가능한 경우 SYS.AUD$ 테이블의 SQL 바인드 및 SQL 텍스트 CLOB 유형 컬럼을 채움, 이 두 열은이 매개 변수가 지정된 경우에만 채워짐


AUDIT_TRAIL을 db, extended로 설정된 상태에서 데이터베이스가 읽기 전용 모드로 시작된 경우 Oracle Database는 내부적으로 AUDIT_TRAIL을 os로 설정함, 자세한 내용은 alert log를 확인해야함



5. xml

audit trail 결과를 OS에 XML 형식으로 저장함, Sql문과 Sql 바인드 정보를 제외한 AuditRecord 노드의 모든 요소를 ​​운영 체제 XML 감사 파일에 기록함



6. XML, extended

AUDIT_TRAIL = xml의 모든 조치를 수행하고 audit trail에 Sql문과 Sql 바인드 정보를 포함함

SQL AUDIT 문을 사용하여이 매개 변수 설정에 관계없이 감사 옵션을 설정할 수 있음


=> db로 설정하면 datafile 사이즈가 증가해서 datafile 용량관리를 잘 해줘야하고

os로 설정하면 datafile 사이즈는 증가하지 않지만 os에 파일이 저장되어서 filesystem 용량관리를 잘 해줘야함



Oracle Unified Auditing for Oracle 12c

Oracle 12c에는 새로운 데이터베이스 감사 기반이 도입됨

Oracle Unified Auditing(통합 감사)은 데이터베이스의 기본 감사 기능을 변경함

Oracle의 이전 릴리스에서는 각 개별 구성 요소에 대해 별도의 감사 추적이있었음

Oracle Unified Auditing(통합 감사) 모든 감사를 단일 저장소 및 뷰로 통합함

이는 두 가지 단순화를 제공함 이제 audit 데이터를 단일 위치에서 찾을 수 있으며 

모든 감사 데이터는 단일 형식임


- Standard database auditing

- SYS operations auditing (AUDIT_SYS_OPERATIONS)

- Fine Grained Audit (FGA)

- Data Pump

- Oracle RMAN

- Oracle Label Security (OLS)

- Database Vault (DV)

- Real Application Security (RAS)

- SQL*Loader Direct Load



Unified Auditing(통합 감사)는 Oracle Enterprise Edition과 함께 제공됨 추가 라이센스가 필요하지 않음 

기본적으로 설치되지만 기본적으로 완전히 활성화되지는 않음 

12c 이전 audit에서 전환 할 수있는 두 가지 작동 모드가 있음


Mixed 모드 – 기본 12c 옵션. 모든 12c 이전 로그 및 감사 기능 및 구성은 이전과 동일하게 작동함

새로운 통합 감사 기능도 사용할 수 있음, 로그 데이터는 기존 위치와 새로운 뷰 SYS.UNIFIED_AUDIT_TRAIL에서 모두 사용할 수 있음 또한 Syslog를 사용할 때 로그 데이터는 일반 텍스트로 계속 기록됨


FULL 모드 또는 PURE 모드 – 데이터베이스를 중지하고 Oracle 커널을 다시 연결해야만 사용할 수 있음 

활성화되면 12c 이전의 로그 및 audit 구성이 무시되고 독점 파일 형식 인 Oracle SecureFiles를 사용하여 감사 데이터가 저장됨

이 때문에 Syslog는 지원되지 않음, 모든 audit 데이터는 SYS.UNIFIED_AUDIT_TRAIL 뷰에서 찾을 수 있음


그림 1 – Oracle 12c 이전 감사



그림 2 – Oracle 12c 통합 감사 – Mixed 모드



그림 3 – Oracle 12c 통합 감사 – PURE 모드



그림 4 – Oracle 12c 통합 감사



audit_sys_operations 파라미터

audit_sys_operations 파라미터가 TRUE 인 경우 sys 유저가 실행한 로그는

AUDIT_FILE_DEST파라미터에 지정된 디렉토리에 텍스트 파일로 생성됨


파라미터 확인

1
2
3
4
5
6
7
8
SQL> show parameter audit
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest         string     /oracle/app/oracle/admin/ORCL12/adump
audit_sys_operations    boolean     TRUE
audit_syslog_level        string
audit_trail                string     DB
unified_audit_sga_queue_size    integer     1048576



audit_trail이 DB 이고 audit_sys_operations 이 TRUE 인 경우 아래와 같은 명령을 입력하면

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SQL> show parameter audit
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest         string     /oracle/app/oracle/admin/ORCL12/adump
audit_sys_operations    boolean     TRUE
audit_syslog_level        string
audit_trail                string     DB
unified_audit_sga_queue_size    integer     1048576
 
SQL> create user IMSI identified by imsi account unlock;
 
User created.
 
SQL> grant dba to imsi;
 
Grant succeeded.



OS의 audit 파일에는 아래와 같이 기록됨

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
$ cd /oracle/app/oracle/admin/ORCL12/adump
$ vi ORCL12_ora_1206_20200202142034301496143795.aud
Audit file /oracle/app/oracle/admin/ORCL12/adump/ORCL12_ora_1206_20200202142034301496143795.aud
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Build label:    RDBMS_12.2.0.1.0_LINUX.X64_170125
ORACLE_HOME:    /oracle/app/oracle/product/12.2.0.1/db_1
System name:    Linux
Node name:      ORACLE12
Release:        4.14.35-1818.3.3.el7uek.x86_64
Version:        #2 SMP Mon Sep 24 14:45:01 PDT 2018
Machine:        x86_64
Instance name: ORCL12
Redo thread mounted by this instance: 1
Oracle process number: 53
Unix process pid: 1206, image: oracle@ORACLE12 (TNS V1-V3)
 
.
.
.
 
Sun Feb  2 14:18:32 2020 +09:00
LENGTH : '540'
ACTION :[289'SELECT NAME NAME_COL_PLUS_SHOW_PARAM,DECODE(TYPE,1,'boolean',2,'string',3,'integer',4,'file',5,'number',6,'big integer', 'unknown') TYPE,DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER(:NMBIND_SHOW_OBJ) ORDER BY NAME_COL_PLUS_SHOW_PARAM,ROWNUM'
DATABASE USER:[1'/'
PRIVILEGE :[6'SYSDBA'
CLIENT USER:[6'oracle'
CLIENT TERMINAL:[5'pts/0'
STATUS:[1'0'
DBID:[10'3621335312'
SESSIONID:[10'4294967295'
USERHOST:[8'ORACLE12'
CLIENT ADDRESS:[0''
ACTION NUMBER:[1'3'
 
Sun Feb  2 14:18:52 2020 +09:00
LENGTH : '298'
ACTION :[47'create user IMSI identified by * account unlock'
DATABASE USER:[1'/'
PRIVILEGE :[6'SYSDBA'
CLIENT USER:[6'oracle'
CLIENT TERMINAL:[5'pts/0'
STATUS:[1'0'
DBID:[10'3621335312'
SESSIONID:[10'4294967295'
USERHOST:[8'ORACLE12'
CLIENT ADDRESS:[0''
ACTION NUMBER:[2'51'
 
 
Sun Feb  2 14:19:02 2020 +09:00
LENGTH : '268'
ACTION :[17'grant dba to imsi'
DATABASE USER:[1'/'
PRIVILEGE :[6'SYSDBA'
CLIENT USER:[6'oracle'
CLIENT TERMINAL:[5'pts/0'
STATUS:[1'0'
DBID:[10'3621335312'
SESSIONID:[10'4294967295'
USERHOST:[8'ORACLE12'
CLIENT ADDRESS:[0''
ACTION NUMBER:[2'17'

21번째 줄에 나온 로그는 

show parameter audit 를 했을 때 내부적으로 실행한 쿼리문을 보여줌

그리고 35번째 줄에는 유저 생성구문이, 50번째 줄에는 grant 구문이 나와있음



21번째 줄에 나온 쿼리문인데 바인드변수 부분에 내부적으로 '%audit%'로 처리한 것 처럼 보임

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL> 
var NMBIND_SHOW_OBJ varchar2(10);
exec :NMBIND_SHOW_OBJ := '%audit%';
SELECT NAME NAME_COL_PLUS_SHOW_PARAM,DECODE(TYPE,1,'boolean',2,'string',3,'integer',4,'file',5,'number',6,'big integer''unknown') TYPE,
DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM 
FROM V$PARAMETER 
WHERE UPPER(NAME) LIKE UPPER(:NMBIND_SHOW_OBJ) 
ORDER BY NAME_COL_PLUS_SHOW_PARAM,ROWNUM
/
 
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest         string     /oracle/app/oracle/admin/ORCL12/adump
audit_sys_operations    boolean     TRUE
audit_syslog_level        string
audit_trail                string     DB
unified_audit_sga_queue_size    integer     1048576

show parameter audit와 동일하게 결과가 나옴



audit 기본 tablespace 변경

audit 결과가 11g 는 SYSTEM tablespace, 12c는 SYSAUX tablespace 에 저장되는데 이렇게

기본 설정으로 두면 해당 시스템 tablespace Full로 DB서비스 장애가 발생할 가능성이 높기 때문에,

audit 테이블은 별도의 tablespace에 저장하는 것이 좋음



기존 audit 정보가 쌓이는 tablespace 확인

1
2
3
4
5
6
7
8
9
10
11
SQL>
select segment_name, tablespace_name, blocks,bytes/1024/1024 "mb" 
from dba_segments 
where segment_name in ('AUD$','FGA_LOG$','AUD$UNIFIED')
/
 
SEGMENT_NA TABLESPACE      BLOCKS     Mb
---------- ---------- ---------- ----------
AUD$       SYSTEM           8      .0625
FGA_LOG$   SYSTEM           8      .0625
AUD$UNIFIED SYSAUX           8      .0625



audit 데이터 저장용 신규 테이블스페이스 생성

1
2
3
SQL> create tablespace SYSAUD datafile '/oracle/app/oracle/oradata/ORCL12/sysaud01.dbf' size 1024m;
 
Tablespace created.



audit 로그 저장 테이블 및 스키마 이동

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
SQL> 
begin
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
    AUDIT_TRAIL_TYPE=>DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
    AUDIT_TRAIL_LOCATION_VALUE => 'SYSAUD') ;
end;
/
 
PL/SQL procedure successfully completed.
 
SQL> 
begin
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
    AUDIT_TRAIL_TYPE=>DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,
    AUDIT_TRAIL_LOCATION_VALUE => 'SYSAUD') ;
end;
/
 
PL/SQL procedure successfully completed.
 
SQL> 
-- 12c only
begin
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
    AUDIT_TRAIL_TYPE=>DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
    AUDIT_TRAIL_LOCATION_VALUE => 'SYSAUD') ;
end;
/
 
PL/SQL procedure successfully completed.



변경 후 확인

1
2
3
4
5
6
7
8
9
10
11
SQL>
select segment_name, tablespace_name, blocks,bytes/1024/1024 "mb" 
from dba_segments 
where segment_name in ('AUD$','FGA_LOG$','AUD$UNIFIED')
/
 
SEGMENT_NA TABLESPACE      BLOCKS     Mb
---------- ---------- ---------- ----------
AUD$       SYSAUD           8      .0625
FGA_LOG$   SYSAUD           8      .0625
AUD$UNIFIED SYSAUX           8      .0625

AUD$, FGA_LOG$는 SYSAUD로 변경이 되었는데 AUD$UNIFIED는 왜 변경이 안되는지 모르겠어서 찾아봄

https://docs.oracle.com/database/121/ARPLS/d_audit_mgmt.htm#ARPLS65429 에 나와있는 내용을 보면

When AUDIT_TRAIL_TYPE is AUDIT_TRAIL_UNIFIED, this procedure sets the tablespace for newer audit records in the unified audit trail but does not move the older audit records. Thus, it is not resource intensive for unified audit trail.

AUDIT_TRAIL_TYPE이 AUDIT_TRAIL_UNIFIED 인 경우 이 프로시저는 통합 감사 추적에서 최신 감사 레코드의 테이블 공간을 설정하지만 이전 감사 레코드는 이동하지 않습니다. 따라서 통합 감사 추적에는 리소스를 많이 사용하지 않습니다. -> ?


이 내용을 보면 아마도 AUD$UNIFIED가 저장되는 tablespace를 변경해도 기존에 발생한 audit 로그는 

계속 기존 tablespace(SYSAUX)에 있고 이후 발생한 audit 로그만 새로운 tablespace(SYSAUD)에 저장되는것 같음



하지만 imsi 유저로 테스트를 해본 결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
SQL> conn imsi/imsi
Connected.
 
SQL> create table dept(  
  deptno     number(2,0),  
  dname      varchar2(14),  
  loc        varchar2(13),  
  constraint pk_dept primary key (deptno)  
);
  
Table created.
 
SQL> insert into dept  
values(20'RESEARCH''DALLAS');    
 
1 row created.
 
SQL> commit;
 
Commit complete.
 
SQL> drop table dept;      
 
Table dropped.
 
SQL> flashback table dept to before drop
 
Flashback complete.
 
SQL> select * from dept;
 
    DEPTNO DNAME      LOC
---------- -------------- -------------
    20 RESEARCH      DALLAS
 
SQL> drop table dept purge;
 
Table dropped.

imsi 라는 계정으로 일련의 작업을 한 뒤 다시 조회해 보았지만

dba_segments 를 조회한 결과는 동일하였음



하지만 dba_audit_mgmt_config_params 뷰를 보니 정상적으로 tablespace가 변경은 된것 같음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SQL> select * from dba_audit_mgmt_config_params;
 
PARAMETER_NAME               PARAMETER_VALUE              AUDIT_TRAIL
------------------------------ ------------------------------ --------------------
DB AUDIT TABLESPACE           SYSAUD                  STANDARD AUDIT TRAIL
DB AUDIT TABLESPACE           SYSAUD                  FGA AUDIT TRAIL
DB AUDIT TABLESPACE           SYSAUD                  UNIFIED AUDIT TRAIL
AUDIT FILE MAX SIZE           10000                  OS AUDIT TRAIL
AUDIT FILE MAX SIZE           10000                  XML AUDIT TRAIL
AUDIT FILE MAX AGE           5                  OS AUDIT TRAIL
AUDIT FILE MAX AGE           5                  XML AUDIT TRAIL
DB AUDIT CLEAN BATCH SIZE      10000                  STANDARD AUDIT TRAIL
DB AUDIT CLEAN BATCH SIZE      10000                  FGA AUDIT TRAIL
OS FILE CLEAN BATCH SIZE       1000                  OS AUDIT TRAIL
OS FILE CLEAN BATCH SIZE       1000                  XML AUDIT TRAIL
AUDIT WRITE MODE           QUEUED WRITE MODE          UNIFIED AUDIT TRAIL
AUDIT FILE MAX SIZE           10000                  UNIFIED AUDIT TRAIL
AUDIT FILE MAX AGE           5                  UNIFIED AUDIT TRAIL
 
14 rows selected.



dba_segments 뷰를 조금 자세히 보았음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SQL>
select SEGMENT_NAME, SEGMENT_SUBTYPE, SEGMENT_TYPE, BYTES/1024/1024, TABLESPACE_NAME
from dba_segments 
where OWNER = 'AUDSYS'
/
 
SEGMENT_NAME               SEGMENT_SU SEGMENT_TYPE         BYTES/1024/1024 TABLESPACE
------------------------------ ---------- ------------------ --------------- ----------
AUD$UNIFIED               ASSM      TABLE PARTITION           .0625 SYSAUX
AUD$UNIFIED               ASSM      TABLE PARTITION           .0625 SYSAUX
AUD$UNIFIED               ASSM      TABLE PARTITION           .0625 SYSAUX
SYS_IL0000017941C00097$$       ASSM      INDEX PARTITION           .0625 SYSAUX
SYS_IL0000017941C00031$$       ASSM      INDEX PARTITION           .0625 SYSAUX
SYS_IL0000017941C00030$$       ASSM      INDEX PARTITION           .0625 SYSAUX
SYS_IL0000017941C00097$$       ASSM      INDEX PARTITION           .0625 SYSAUX
SYS_IL0000017941C00031$$       ASSM      INDEX PARTITION           .0625 SYSAUX
SYS_IL0000017941C00030$$       ASSM      INDEX PARTITION           .0625 SYSAUX
SYS_IL0000017941C00097$$       ASSM      INDEX PARTITION           .0625 SYSAUX
SYS_IL0000017941C00031$$       ASSM      INDEX PARTITION           .0625 SYSAUX
SYS_IL0000017941C00030$$       ASSM      INDEX PARTITION           .0625 SYSAUX
SYS_LOB0000017941C00030$$      SECUREFILE LOB PARTITION         .125 SYSAUX
SYS_LOB0000017941C00031$$      SECUREFILE LOB PARTITION         .125 SYSAUX
SYS_LOB0000017941C00097$$      SECUREFILE LOB PARTITION         .125 SYSAUX
SYS_LOB0000017941C00031$$      SECUREFILE LOB PARTITION         .125 SYSAUX
SYS_LOB0000017941C00030$$      SECUREFILE LOB PARTITION         .125 SYSAUX
SYS_LOB0000017941C00030$$      SECUREFILE LOB PARTITION         .125 SYSAUX
SYS_LOB0000017941C00097$$      SECUREFILE LOB PARTITION         .125 SYSAUX
SYS_LOB0000017941C00031$$      SECUREFILE LOB PARTITION         .125 SYSAUX
SYS_LOB0000017941C00097$$      SECUREFILE LOB PARTITION         .125 SYSAUX
 
21 rows selected.

파이션 테이블로 저장이 되고있음



이 파티션 테이블을 삭제하고 다시 imsi 유저로 작업을 해봄

AUD$UNIFIED 삭제

1
2
3
4
5
6
SQL> truncate table AUDSYS.AUD$UNIFIED;  
truncate table AUDSYS.AUD$UNIFIED
                      *
ERROR at line 1:
ORA-46385: DML and DDL operations are not allowed on table
"AUDSYS"."AUD$UNIFIED".

실패함 해당 audit 테이블은 DML 또는 DDL을 수행할 수 없다고함



삭제하려면 아래 명령을 사용해야함

남아있는 audit 확인

1
2
3
4
5
6
7
8
SQL> 
select unified_audit_policies,action_name,count(*
from unified_audit_trail 
group by unified_audit_policies,action_name;
 
UNIFIED_AUDIT_POLICIES ACTION_NAME  COUNT(*)
---------------------- ---------- ----------
ORA_SECURECONFIG     UNDROP OBJECT      1



모두 삭제

1
2
3
4
5
6
7
8
9
SQL> 
begin 
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
     AUDIT_TRAIL_TYPE=>DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
     USE_LAST_ARCH_TIMESTAMP=>false);
end;
/
 
PL/SQL procedure successfully completed.



다시 확인

1
2
3
4
5
6
7
8
9
SQL> 
select unified_audit_policies,action_name,count(*
from unified_audit_trail 
group by unified_audit_policies,action_name;
 
UNIFIED_AUDIT_POLICIES ACTION_NAME  COUNT(*)
---------------------- ---------- ----------
 
EXECUTE                                   1

모두 지워지고 EXCUTE 한 기록만 남아있음



다시 imsi 유저로 작업 후 확인해 보았지만 이 쿼리 결과는 동일하게 나옴

1
2
3
4
5
6
7
8
9
10
11
SQL>
select segment_name, tablespace_name, blocks,bytes/1024/1024 "mb" 
from dba_segments 
where segment_name in ('AUD$','FGA_LOG$','AUD$UNIFIED')
/
 
SEGMENT_NA TABLESPACE      BLOCKS     Mb
---------- ---------- ---------- ----------
AUD$       SYSAUD           8      .0625
FGA_LOG$   SYSAUD           8      .0625
AUD$UNIFIED SYSAUX           8      .0625



truncate 방법을 찾음

db를 upgrade mode로 startup 한뒤에 truncate 명령을 사용하면 에러가 발생하지 않는다고함

db 종료

1
2
3
4
SQL> shutdown immediate 
Database closed.
Database dismounted.
ORACLE instance shut down.



upgrade mode로 startup

1
2
3
4
5
6
7
8
9
10
SQL> startup upgrade;
ORACLE instance started.
 
Total System Global Area 1660944384 bytes
Fixed Size            8621376 bytes
Variable Size          989856448 bytes
Database Buffers      654311424 bytes
Redo Buffers            8155136 bytes
Database mounted.
Database opened.



AUDSYS.AUD$UNIFIED 테이블 truncate 시도

1
2
3
SQL> truncate table AUDSYS.AUD$UNIFIED;  
 
Table truncated.



다시 재기동 후 확인

1
2
3
4
5
6
7
8
SQL> shutdown immediate
SQL> startup
SQL> 
select unified_audit_policies,action_name,count(*
from unified_audit_trail 
group by unified_audit_policies,action_name;
 
no rows selected



다시 imsi 유저로 작업 후 확인해 보았지만 이 쿼리 결과는 동일하게 나옴

1
2
3
4
5
6
7
8
9
10
11
SQL>
select segment_name, tablespace_name, blocks,bytes/1024/1024 "mb" 
from dba_segments 
where segment_name in ('AUD$','FGA_LOG$','AUD$UNIFIED')
/
 
SEGMENT_NA TABLESPACE      BLOCKS     Mb
---------- ---------- ---------- ----------
AUD$       SYSAUD           8      .0625
FGA_LOG$   SYSAUD           8      .0625
AUD$UNIFIED SYSAUX           8      .0625


=> 오라클 커뮤니티에서 답을 찾음

JimFx 2018. 6. 21 오후 9:50 (Mark D Powell에 대한 응답)

The audit uses the default build tablespace, SYSAUX, until the partition interval is hit. Then any new partitions are created in the tablespace defined dbms_audit_mgmt.set_audit_trail_location

audit는 파티션 간격에 도달 할 때까지 기본 빌드 테이블 스페이스 SYSAUX를 사용합니다. 그런 다음 테이블 스페이스 정의 dbms_audit_mgmt.set_audit_trail_location에 새 파티션이 작성됩니다.

=> AUD$UNIFIED 해당 테이블이 파티션 테이블인데 월별로 자동으로 파티션됨

그래서 dbms_audit_mgmt.set_audit_trail_location로 저장되는 tablespace를 변경해도 바로 변경이 안되고

다음에 할당되는(만들어지는) 파티션부터 새로운 tablespace에 저장된다고함



시간이 날때 OS 시간을 1달뒤로 변경한 뒤 다시한번 imsi 유저로 작업한뒤 audit를 확인해봐야겠음



audit 관련 뷰

감사 정보 획득

- ALL_DEF_AUDIT_OPTS (Default audit options)

- DBA_STMT_AUDIT_OPTS (Statement auditing options)

- DBA_PRIV_AUDIT_OPTS (Privilege auditing options)

- DBA_OBJ_AUDIT_OPTS (Schema object auditing options)

감사가 수행된 결과

- DBA_AUDIT_TRAIL (All audit trail entries)

- DBA_AUDIT_EXISTS (Records for AUDIT EXISTS/NOT EXISTS)

- DBA_AUDIT_OBJECT (Records concerning schema objects)




참조 : 

http://rastalion.me/archives/619

http://blog.daum.net/_blog/BlogTypeView.do?blogid=07wRi&articleno=15858542&_bloghome_menu=recenttext

https://makebob.tistory.com/458

http://www.gurubee.net/lecture/1861

https://secmaster.tistory.com/23

https://aozjffl.tistory.com/412

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/refrn/AUDIT_TRAIL.html#GUID-BD86F593-B606-4367-9FB6-8DAB2E47E7FA

https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams017.htm#REFRN10006

https://docs.oracle.com/database/121/DFSIG/unified-auditing.htm#DFSIG-GUID-3AD31C6F-26CD-4AD1-8B5A-D69A6A0A4BE2

Doc ID 2229667.1

https://www.integrigy.com/oracle-security-blog/what-oracle-release-12c-unified-auditing

https://blog.dbi-services.com/purging-unified-audit-trail-in-12cr2/

https://community.oracle.com/thread/4153382

http://www.gurubee.net/lecture/1862