Secrets of the Oracle Database筆記

westzq1984發表於2012-12-14
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEAUDIT_SYSLOG_LEVEL引數

9i開始,所有sysdba使用者的登入都將在adump下被審計記錄。

但存在一個安全隱患,就是審計記錄可能被知道oracle使用者密碼的人清除

那麼通過設定audit_syslog_level引數

可以降sysdba使用者的審計資料放入系統的日誌檔案中

 

LINUX使用者:

[root@zhangqiaoc log]# ls -l /u01/app/oracle/admin/o11203/adump

total 0

[root@zhangqiaoc log]# tail -n 10 /var/log/messages

Dec 14 10:12:11 zhangqiaoc syslogd 1.4.1: restart.

Dec 14 10:47:17 zhangqiaoc Oracle Audit[13613]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:47:21 zhangqiaoc Oracle Audit[13618]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:48:03 zhangqiaoc Oracle Audit[13618]: LENGTH : '160' ACTION :[8] 'SHUTDOWN' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:51:31 zhangqiaoc Oracle Audit[13895]: LENGTH : '155' ACTION :[7] 'STARTUP' DATABASE USER:[1] '/' PRIVILEGE :[4] 'NONE' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[13] 'Not Available' STATUS:[1] '0' DBID:[0] ''

Dec 14 10:51:31 zhangqiaoc Oracle Audit[14037]: LENGTH : '148' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[0] ''

Dec 14 10:51:36 zhangqiaoc Oracle Audit[14101]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:51:55 zhangqiaoc Oracle Audit[14149]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:52:22 zhangqiaoc Oracle Audit[14232]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:52:27 zhangqiaoc Oracle Audit[14236]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

 

通過設定audit_sys_operations=truesysdba使用者執行的語句也將記錄在OS日誌中

Dec 14 10:55:54 zhangqiaoc Oracle Audit[14419]: LENGTH : '424' ACTION :[281] 'SELECT DECODE(null,'','Total System Global Area','') NAME_COL_PLUS_SHOW_SGA,   SUM(VALUE), DECODE (null,'', 'bytes','') units_col_plus_show_sga FROM V$SGA    UNION ALL    SELECT NAME NAME_COL_PLUS_SHOW_SGA , VALUE,    DECODE (null,'', 'bytes','') units_col_plus_show_sga FROM V$SGA' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[0] ''

Dec 14 10:55:59 zhangqiaoc Oracle Audit[14419]: LENGTH : '175' ACTION :[22] 'ALTER DATABASE   MOUNT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:55:59 zhangqiaoc Oracle Audit[14483]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:56:01 zhangqiaoc Oracle Audit[14483]: LENGTH : '172' ACTION :[19] 'ALTER DATABASE OPEN' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

 

但是注意,如果是啟動資料庫,會仍然在adump下審計許可權,但是其他動作都是在OS日誌中審計

 

如何和audit_trail配合?

只有在設定audit_trailOS的情況下,才會在OS日誌中寫入審計資料

但是注意設定為OS是無法和EXTENDED配合使用的,也就是無法捕獲到SQL語句

 

另外,將審計資料放入OS日誌中,將無法通過一些ORACLE檢視來進行查詢。

 

EVENT 10027 控制死鎖TRC級別

當由於業務造成的死鎖無法及時修改程式以修正問題時,可以通過該EVENT控制TRC級別,降低過多的死鎖TRC造成的影響。

也可以通過提高死鎖TRC的級別,獲得更多的診斷死鎖的資訊

 

ALTER SYSTEM SET EVENTS '10027 trace name context forever, level 1';

EVENT="10027 trace name context forever, level 1"

 

Contents/Level       Default Level 1 Level 2          Level 4

-------------------- ------- ------- ---------------- -------

Cached cursors       yes     no      yes              yes

Call stack trace     no      no      no               yes

Deadlock graph       yes     yes     yes              yes

Process state        yes     no      yes              yes

SQL statements       yes     yes     yes,all sessions yes

Session wait history yes     no      yes,all sessions yes

System state         no      no      yes              no

 

EVENT 10079 dump Oracle Net traffic

Level Purpose

----- ----------------------------------------------

1     Trace network operations to/from client

2     In addition to level 1, dump data

4     Trace network operations to/from database link

8     In addition to level 4, dump data

 

ALTER SESSION SET EVENTS '10079 trace name context forever, level 2';

 

直接dump發出的網路包到TRC檔案中。相當於設定sqlnet.ora啟動TRC時,在support級別dump下來的包。

 

不過其只能DUMP包,無法跟蹤連線資訊等

 

注意,在11g下,如果想client跟蹤,在指定目錄下生成TRC檔案,必須在sqlnet.ora中設定DIAG_ADR_ENABLED=off。如果不設定,根本沒有任何TRC產生!!!

 

另外,在本節中提到了alter user identified by password修改使用者密碼一個區別

alter user identified by 修改密碼時,密碼是通過明文進行網路傳輸

password修改密碼時,密碼加密後在網路傳輸

 

ALTER SESSION SET CURRENT_SCHEMA

經常用這個,但是從沒深入研究過,閱讀了該節後有了新的認識

1.    Oracle資料庫中有兩種身份:schema userprivilege user

2.    預設的,這兩種身份指定的使用者是相同的,但不是必須相同

3.    如通過imp,使用SYSTEM匯入業務使用者資料時,會話的PARSING_USER_IDSYSTEM,而PARSING_SCHEMA_ID為業務使用者

4.    ALTER SESSION SET CURRENT_SCHEMA 其實就是修改schema user

 

ALTER SESSION SET CURRENT_SCHEMA的限制:

1.    對高階佇列物件無效,不能使用ALTER SESSION SET CURRENT_SCHEMA後操作業務使用者的高階佇列

2.    Rename無效,但是用alter table rename to是可以的

3.    無法使用目標使用者的Private db link

 

DBMS_BACKUP_RESTORE 如何連線備份管理軟體

在使用dbms_backup_restore.deviceallocate分配通道時通過TYPEPARAMS引數指定:

v_devtype := DBMS_BACKUP_RESTORE.deviceAllocate(

TYPE => 'SBT_TAPE',

IDENT => 'channel1',

PARAMS => 'ENV=(TDPO_OPTFILE=/usr/tivoli/tsm/client/oracle/bin64/tdpo.opt)'

);

 

DBMS_IJOB匯出建立JOB的指令碼

 

variable job number

variable submit_call varchar2(4000)

variable instance_call varchar2(4000)

exec :job:=&job_number;

begin

    dbms_ijob.full_export(:job, :submit_call, :instance_call);

end;

/

print submit_call

print instance_call

 

SQL> variable job number

SQL> variable submit_call varchar2(4000)

SQL> variable instance_call varchar2(4000)

SQL> exec :job:=&job_number;

Enter value for job_number: 4001

 

PL/SQL procedure successfully completed.

 

SQL> begin

  2      dbms_ijob.full_export(:job, :submit_call, :instance_call);

  3  end;

  4  /

 

PL/SQL procedure successfully completed.

SQL> print submit_call

SUBMIT_CALL

--------------------------------------------------------------------------------

sys.dbms_ijob.submit(job=>4001,luser=>'SYS',puser=>'APEX_030200',cuser=>'APEX_03

0200',next_date=>to_date('2012-12-14:17:25:43','YYYY-MM-DD:HH24:MI:SS'),interval

=>'sysdate + 8/24',broken=>FALSE,what=>'wwv_flow_cache.purge_sessions(p_purge_se

ss_older_then_hrs => 24);',nlsenv=>'NLS_LANGUAGE=''AMERICAN'' NLS_TERRITORY=''AM

ERICA'' NLS_CURRENCY=''$'' NLS_ISO_CURRENCY=''AMERICA'' NLS_NUMERIC_CHARACTERS='

'.,'' NLS_DATE_FORMAT=''DD-MON-RR'' NLS_DATE_LANGUAGE=''AMERICAN'' NLS_SORT=''BI

NARY''',env=>'0102000202000000');

SQL> print instance_call

 

INSTANCE_CALL

--------------------------------------------------------------------------------

null;

 

DBMS_SYSTEM

獲得環境變數配置

SET AUTOPRINT ON

VARIABLE val VARCHAR2(4000)

BEGIN

  dbms_system.get_env('ORACLE_HOME', :val);

END;

/

 

清空V$SESSION_EVENT.MAX_WAIT / V$FILESTAT.MAXIORTM / V$FILESTAT.MAXIOWTM

EXEC DBMS_SYSTEM.KCFRMS;

 

向使用者的TRC檔案中寫入當前時間

EXEC DBMS_SYSTEM.KSDDDT;

 

將快取中的資料刷到ALERT/TRC

EXEC DBMS_SYSTEM.KSDFLS;

 

向使用者的TRC中寫入N:

EXEC DBMS_SYSTEM.KSDIND(3)

 

TRC/ALERT寫日誌

1TRC 2ALERT 3BOTH

EXEC DBMS_SYSTEM.KSDWRT(1, '1111111111')

 

讀取EVENT設定

VARIABLE lev number

SET AUTOPRINT ON

EXECUTE sys.dbms_system.read_ev(10046, :lev)

 

為其他會話設定回話級的引數

EXEC dbms_system.set_int_param_in_session(70, 43, 'sort_area_size', 1048576);

EXEC dbms_system.set_bool_param_in_session(12, 16, 'timed_statistics', TRUE);  -- 對大部分引數無效

 

VARIABLE result NUMBER

VARIABLE VALUE NUMBER

VARIABLE dummy VARCHAR2(255)

BEGIN

    :result:=dbms_utility.get_parameter_value(parnam=>'workarea_size_policy',

        intval=>:VALUE, strval=>:dummy);

END;

/

PRINT VALUE

可以讀取引數配置。發現引數其實都是用數字表示的

但是通過dbms_system.set_int_param_in_session 是無法設定哪些非數字值的引數,只能設定INT

 

LISTENER引數IP=FIRST

預設如果監聽設定的主機名,將繫結所有的IP地址

設定IP=FIRST的作用就是指繫結該名稱返回的第一個地址。

如果本來就指定的IP地址,那麼沒必要指定IP=FIRST

設定IP=FIRST,對於Loopback地址也不在監聽

 

只對主機名有效,如果設定的為非主機名的IP地址的名稱,則其本身就只監聽該IP地址

 

關閉節點上某個SERVICE的全部SESSION

RAC下可以用來在例項都恢復後,關閉本不應該在該節點上的SERVICE(其他例項FAILOVER過來的),使其從新FAILOVER會本身的節點

EXEC dbms_service.disconnect_session('TAF_INST_SVC')

下次重啟節點時可以測試下

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8242091/viewspace-751147/,如需轉載,請註明出處,否則將追究法律責任。

相關文章