Database/ORACLE

[스크랩] sysdba / sysoper 권한 접속자 session audit

99iberty 2014. 7. 31. 13:18

 

http://totoriver.egloos.com/viewer/3095107

 

"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.aud

Oracle 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 sysdba

SQL> 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값으로 사용됩니다.

출처: http://jinh2004.blog.me/80107862509