"sysdba" 혹은 "sysoper" privilege으로 connect한 session의 audit은 별도의 설정없이도 자동으로
수행되고 있습니다.
즉, audit과 관련된 "audit_trail" 과 "audit_sys_operations" initialization parameter를
default값인 "none" 과 "false"로 설정해 놓은 상태에서도
"audit_file_dest" initialization parameter가 가리키는 곳에 audit logs가 생성됩니다.
dedicated server session의 경우에는,
"<ORACLE_SID>_ora_6390_1.aud"와 같은 이름의 audit file이 생성되며,
shared server session의 경우에는,
"<ORACLE_SID>_s001_3552_1.aud"와 같은 이름의 audit file이 생성됩니다.
아래는 audit log의 sample입니다.
Audit file /usr/local/oracle/diag/rdbms/orcl/ORCL/audit/orcl_ora_6390_1.audOracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production … Instance name: ORCL Redo thread mounted by this instance: 1 Oracle process number: 31 Unix process pid: 6390, image: oracle@db_server.ge.com Fri May 21 15:10:47 2010 LENGTH : '147' ACTION :[7] 'CONNECT' DATABASE USER:[2] 'SYS' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[9] 'oracle' CLIENT TERMINAL:[10] 'pts/0' STATUS:[1] '0' |
항목 | 설명 |
action | sysdba권한으로 실행한 operation이 기록되는데, "audit_sys_operations"가 "false"인 상태에서는 "connect", "startup", "shutdown" 이라는 3가지 operations만이 기록되지만, "audit_sys_operations" 가 "true"인 상태에서는 실행된 SQL문 및 SQL*Plus commands가 모두 기록됩니다. |
database user | connect시에 사용된 database username이 기록되는데, database server상에서 "connect / as sysdba"로 connect한 경우에는 "/"만이 기록됩니다. |
privilege | connect할 때에 사용된 privilege이 기록되는데, "sysdba" 아니면 "sysoper"라는 값을 가집니다. |
client user | connect할 당시의 O/S username이 기록되는데, database server에 "oracle" user로 login한 상태라면 "oracle"이라는 값이 기록됩니다. |
client terminal | connect을 요구한 terminal정보가 기록되는데, remote machine으로부터의 request 인 경우에는 remote machine의 hostname이 기록되며, database server상에서 connect한 경우에는 "pts/0"등의 값이 기록됩니다. |
status | 해당 operations가 정상적으로 종료된 경우에는 "0", 그렇지 않은 경우에는 다른 숫자가 기록됩니다. |
앞에서 잠시 언급했지만, "audit_sys_operations"가 "false"인 상태에서는
"connect", "startup", "shutdown" 이라는 3가지 operations만이 기록되기 때문에,
언제 누가 어느 machine으로부터 access 했는지만 알 수 있을 뿐,
sysdba권한을 이용해서 구체적으로 어떤 SQL commands를 수행했는지는 알 수가 없습니다.
그러므로 sysdba권한을 가지고 수행된 모든 operations를 추적하기 위해서는 "audit_sys_operations"
를 "true"로 설정할 필요가 있습니다. 이렇게 설정하면 "audit_trail"값이 "none"이어도 operations에 대한 정보를 얻을 수 있습니다
.
…Fri May 21 15:42:06 2010 LENGTH : '166' ACTION :[35] 'alter database drop logfile group 6' /* 구체적인 operations가 기록됩니다 */DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/2' STATUS:[1] '0' … |
위와 같이 평범한 text file이 아닌 xml format으로 audit file이 생성되도록 할 수도 있는데,
그 방법은 "audit_trail"의 값을 "xml" 혹은 "xml,extended"로 설정하는 것입니다.
이렇게 설정할 경우, 아래의 예와 같이 xml file
에 담긴 audit trail정보를 "v$xml_audit_trail" view를 통해서 열람할 수도 있게
됩니다.
SQL> connect / as sysdbaSQL> alter system set audit_trail = xml,extended scope=spfile; SQL> shutdown immediate; SQL> startup; SQL> show parameter audit
SQL> alter database add logfile group 4; Database altered. SQL> exit $ cd /usr/local/oracle/diag/rdbms/orcl/ORCL/audit $ vi orcl_ora_10041_1.xml
$ sqlplus / as sysdba SQL> select sql_text from v$xml_audit_trail;
|
참고로 "audit_trail" initialization parameter
의 값을 "db" 혹은 "db,extended" 값으로 설정하더라도, sysdba 및 sysoper권한으로 작업한 내용에 대한 audit records는 "aud$"에 남겨지지 않습니다
.
지금까지의 내용은 Linux환경에 기반해서 설명했습니다만,
Windows계열의 O/S환경에서는 "audit_trail" parameter의 값을 "os"로 설정하는 경우,
Event Viewer의 log file에 audit records가 기록되게 됩니다.
마지막으로 "audit_file_dest" initialization parameter에 대해서 잠시 언급하고자 합니다.
만약 이 값을 설정하지 않게 되면, default값으로
Unix계열의 경우에는, "$ORACLE_BASE/admin/<ORACLE_SID>/adump"값이 사용되며,
Windows의 경우에는"%ORACLE_BASE%\admin\<ORACLE_SID>\adump"값이 사용됩니다.
위의 directory가 존재하지 않는 경우에는,
"$ORACLE_HOME/rdbms/audit"라는 값이 default값으로 사용됩니다.
'오라클 > 이론 및 정보' 카테고리의 다른 글
[펌]권한과 롤 (1) | 2012.06.14 |
---|---|
[펌]with grant option과 with admin option (0) | 2012.06.13 |
[펌]Table size 및 INDEX size 구하기. (1) | 2012.05.23 |
[펌]oracle 여러가지 조회방법 (1) | 2012.05.23 |
[펌]Invalid Object란? (0) | 2012.05.22 |