본문 바로가기

오라클/이론 및 정보

[펌]sysdba , sysoper privilege의 session aduit

반응형

"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
name type value
audit_file_dest string /usr/local/oracle/diag/rdbms/orcl/ORCL/audit
audit_sys_operations boolean true
audit_syslog_level string
audit_trail string xml, extended


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

<AuditRecord>
<Audit_Type>4</Audit_Type>
<Session_Id>4294967295</Session_Id>
<StatementId>1</StatementId>
<EntryId>4</EntryId>
<Extended_Timestamp>2010-05-21T15:56:23.227459</Extended_Timestamp>
<DB_User>/</DB_User>
<Ext_Name>oracle</Ext_Name>
<OS_User>oracle</OS_User>
<Userhost>db_server.ge.com</Userhost>
<OS_Process>10041</OS_Process>
<Instance_Number>0</Instance_Number>
<Returncode>0</Returncode>
<OSPrivilege>SYSDBA</OSPrivilege>
<Sql_Text>alter database add logfile group 6</Sql_Text>
</AuditRecord>


$ sqlplus / as sysdba


SQL> select sql_text from v$xml_audit_trail;
sql_text
...
alter database add logfile group 4;

 

 

참고로 "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