Bo's Oracle Station

查看: 2602|回复: 0

课程第55/56次(2017-11-18星期六上下午)

[复制链接]

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2017-11-18 09:46:36 | 显示全部楼层 |阅读模式
1Z0-052第11章
1Z0-05219章(上完16章),1Z0-05321章(上完16章)和1Z0-063多租户部分共9章(上完0章)
总共上完全部49章中的32
对象审计不能到列,不focus并且对SYS不审计。11g开始by session 和 by access只有审计轨迹上的"session record"微小差别:
  1. select  * from Dba_Audit_Trail
  2. order by timestamp desc;

  3. select  * from dba_obj_audit_opts
  4. where owner='HR';

  5. audit update  on  hr.employees ;

  6. audit alter on hr.employees whenever successful;

  7. audit insert on hr.employees  whenever not successful;

  8. noaudit select  on hr.employees ;

  9. audit select on hr.employees by session ;

  10. audit alter on hr.employees by session whenever not successful;
复制代码
Screenshot.png

关于xml格式的审计:
  1. select  * from v$xml_audit_trail
  2.   where db_user='HR'
  3.   order by extended_timestamp desc;

  4. select  * from Dba_Audit_Trail
  5. order by timestamp desc;

  6. select  * from dba_common_audit_trail
  7.    where db_user='HR'
  8. order by extended_timestamp desc ;
复制代码
Screenshot-1.png



  1. select  * from dba_sys_privs p
  2. where p.GRANTEE='USER4';

  3. select  * from dba_tab_privs p
  4. where p.GRANTEE='USER4';

  5. grant select any table to user4;

  6. grant create any table to user4;

  7. audit select  any table by user4 by session;

  8. --error
  9. audit create any table by user4 by access;


  10. select * from dba_priv_audit_opts;



  11. select  * from dba_common_audit_trail
  12.    where db_user  not in ('SYS','/')
  13. order by extended_timestamp desc ;
复制代码
DDL 性质的权限审计只能by access不能by session:
Screenshot-2.png

语句级审计都不能by session:
Screenshot-3.png

  1. select s.audit_option from dba_stmt_audit_opts s
  2. minus
  3. select  p.privilege from dba_priv_audit_opts p;

  4. audit table by hr ;
复制代码

细粒度审计:
  1. create table audit1( a varchar2(2000))   tablespace    tbsaudit;

  2. select  * from dba_audit_policies;


  3. select  * from dba_fga_audit_trail  
  4. order by timestamp desc;

  5. select  * from dba_common_audit_trail
  6.    where db_user  not in ('SYS','/')
  7. order by extended_timestamp desc ;

  8. create or replace procedure procfga  (p_owner varchar2,
  9.                                         p_table varchar2,
  10.                                                                                 p_policy varchar2)
  11. is
  12. begin               
  13.   insert into audit1
  14.       values (      sys_context('userenv','os_user')||
  15.                        ' '||user||
  16.                                    ' '||sys_context('userenv','session_user')||
  17.                                    ' '||sys_context('userenv','current_user')||
  18.                                    ' '||sysdate||
  19.                                    ' '||sys_context('userenv','ip_address')||
  20.                                    ' '||p_owner||
  21.                                    ' '||p_table||
  22.                                    ' '||p_policy  );               
  23. end;        

  24. select  * from audit1;

  25. begin
  26. dbms_fga.add_policy(OBJECT_SCHEMA=>'HR',
  27.                                    OBJECT_NAME=>'EMPLOYEES',
  28.                                                                    POLICY_NAME=>'POLICY1',
  29.                                                                    AUDIT_CONDITION=>'department_id=20',
  30.                                                                    AUDIT_COLUMN=>'salary, commission_pct',
  31.                                                                    HANDLER_SCHEMA=>'SYS',
  32.                                                                    HANDLER_MODULE=>'procfga',
  33.                                                                    ENABLE=>true,
  34.                                                                    STATEMENT_TYPES=>'SELECT,UPDATE',
  35.                                                                    AUDIT_TRAIL=>dbms_fga.XML+dbms_fga.EXTENDED,
  36.                                                                    AUDIT_COLUMN_OPTS=>dbms_fga.ANY_COLUMNS);
  37.                                 end;
  38.                                 
  39.                 select  * from dba_audit_policies;
  40.                
  41.                 select  * from audit1;               
  42.                                                                                                                                           
复制代码

Screenshot-4.png

  1. select  * from audit1;

  2. begin
  3. dbms_fga.drop_policy('HR','EMPLOYEES','POLICY1');
  4. end;


  5. begin
  6. dbms_fga.add_policy(OBJECT_SCHEMA=>'HR',
  7.                                    OBJECT_NAME=>'EMPLOYEES',
  8.                                                                    POLICY_NAME=>'POLICY1',
  9.                                                                    AUDIT_CONDITION=>'department_id=20',
  10.                                                                    AUDIT_COLUMN=>'salary, commission_pct',
  11.                                                                    HANDLER_SCHEMA=>'SYS',
  12.                                                                    HANDLER_MODULE=>'procfga',
  13.                                                                    ENABLE=>true,
  14.                                                                    STATEMENT_TYPES=>'SELECT,UPDATE',
  15.                                                                    AUDIT_TRAIL=>dbms_fga.XML+dbms_fga.EXTENDED,
  16.                                                                    AUDIT_COLUMN_OPTS=>dbms_fga.ALL_COLUMNS);
  17.                                 end;
  18.                                                                
  19.                                                                
  20.                                                                
复制代码

基于值的审计, trigger是同一个事务,如果用户rollback,审计记录也会rollback:

  1. create table audit2( a varchar2(2000))   tablespace    tbsaudit;
复制代码
  1. create or replace trigger  trigvalue
  2. after update of salary on hr.employees
  3. referencing new as new old as old
  4. for each row
  5. begin
  6.   if :old.salary != :new.salary then
  7.      insert into audit2
  8.       values (  sys_context('userenv','os_user')||' '||user||' '||sysdate||' modified '||:new.salary||' '||:old.salary||' '||sys_context('userenv','ip_address')    );      
  9.   end if;  
  10. end;
复制代码
Screenshot-5.png

直接路径加载的对比实验:
  1. select  tablespace_name from dba_tables t
  2. where t.TABLE_NAME  like 'T_BIG%';

  3. select  s.segment_name, bytes/1024/1024     from dba_segments s
  4. where s.SEGMENT_NAME like 'T_BIG%';

  5. alter table hr.t_big allocate extent ( size 2G );

  6. alter table hr.t_big2 allocate extent ( size 2G ) ;

  7. alter system flush buffer_cache;


  8. select    n.name, se.value/1024/1024
  9.   from v$session s, v$sesstat se ,v$statname n
  10.   where s.sid=se.sid and se.statistic#=n.statistic#
  11.   and ( n.name='redo size'   or  n.name like 'undo%'  )    and s.terminal='pts/1';
复制代码
Screenshot.png
直接路径加载,最后检查索引的唯一性,导致索引不可用:
  1. sqlldr  hr/oracle_4U control=ulcase4.ctl  direct=y
复制代码

Screenshot-1.png
传统路径加载,只有7行,但是索引可用:
  1. sqlldr  hr/oracle_4U control=ulcase4.ctl
复制代码
  1. select  i.INDEX_NAME, i.STATUS
  2. from dba_indexes i
  3. where i.TABLE_OWNER='HR' and i.TABLE_NAME='EMP';
复制代码
控制文件里有这样的语句,就只能用直接路径加载:
--
load data
infile 'ulcase6.dat'
replace
into table emp
sorted indexes (empix)
(empno position(1:4),
ename position(6:15),
job position(17:25),
mgr position(27:30) nullif mgr=blanks,
sal position(32:39) nullif sal=blanks,
comm position(41:48) nullif comm=blanks,
deptno position(50:51) nullif empno=blanks)


  1. [oracle@station26 demo]$ sqlldr  hr/oracle_4U control=ulcase6.ctl  

  2. SQL*Loader: Release 12.1.0.2.0 - Production on Fri Dec 8 17:34:10 2017

  3. Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

  4. SQL*Loader-256: SORTED INDEXES option allowed only for direct path
复制代码
日志中会出现:
SQL*Loader: Release 12.1.0.2.0 - Production on Fri Dec 8 17:34:34 2017

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

Control File:   ulcase6.ctl
Data File:      ulcase6.dat
  Bad File:     ulcase6.bad
  Discard File:  none specified

(Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Continuation:    none specified
Path used:      Direct

Table EMP, loaded from every logical record.
Insert option in effect for this table: REPLACE

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                                 1:4     4           CHARACTER
ENAME                                6:15    10           CHARACTER
JOB                                 17:25     9           CHARACTER
MGR                                 27:30     4           CHARACTER
    NULL if MGR = BLANKS
SAL                                 32:39     8           CHARACTER
    NULL if SAL = BLANKS
COMM                                41:48     8           CHARACTER
    NULL if COMM = BLANKS
DEPTNO                              50:51     2           CHARACTER
    NULL if EMPNO = BLANKS

The following index(es) on table EMP were processed:
index HR.EMPIX loaded successfully with 7 keys


Table EMP:
                                                                                                                    1,0-1         Top



银行对账单的例子,第一步建表:
  1. create table hr.t_bank_invoice (
  2.     account_number  number ,
  3.      sub_number number ,
  4.     transac_date   date ,
  5.       transac_address  varchar2(600),
  6.     transac_comment    varchar2(600),
  7.        currency    varchar2(100),
  8.       remit   varchar2(100),
  9.      in_amount  number(20,2)  ,
  10.    out_amount   number(20,2),
  11.     balance     number(20,2),
  12.    opposite_number    number  ,
  13.   opposite_username    varchar2(100),
  14.     all_comment      varchar2(2000)) ;
复制代码

工行:
  1. LOAD DATA
  2. characterset ZHS16GBK
  3. INFILE 'icbc.dat'
  4. DISCARDFILE 'icbc.dis'
  5. append
  6. INTO table t_bank_invoice
  7. when (5) ='^'
  8. FIELDS TERMINATED BY '^'
  9. TRAILING NULLCOLS
  10. (
  11.    account_number "1402029101000999999",
  12.    sub_number "00000",
  13.    transac_date position(6:15) DATE(10) "YYYY-MM-DD" TERMINATED BY WHITESPACE,
  14.    transac_address TERMINATED BY WHITESPACE
  15.     "substr(:transac_address,2)",
  16.    transac_comment TERMINATED BY WHITESPACE
  17.     "substr(:transac_comment,2)",
  18.    currency TERMINATED BY WHITESPACE
  19.     "substr(:currency,2)",
  20.    remit TERMINATED BY WHITESPACE
  21.     "substr(:remit,2)",
  22.    in_amount TERMINATED BY WHITESPACE
  23.     "TO_NUMBER(substr(:in_amount,2),'999,999,999,999.00')",
  24.    out_amount TERMINATED BY WHITESPACE
  25.     "TO_NUMBER(substr(:out_amount,2),'999,999,999,999.00')",
  26.    balance TERMINATED BY WHITESPACE
  27.     "TO_NUMBER(substr(:balance,2),'999,999,999,999.00')",
  28.    all_comment TERMINATED BY WHITESPACE
  29.     "substr(:all_comment,2)"
  30. )
复制代码

建行:
  1. LOAD DATA
  2. characterset ZHS16GBK
  3. INFILE 'ccb.dat'
  4. DISCARDFILE 'ccb.dis'
  5. append
  6. INTO table t_bank_invoice
  7. TRAILING NULLCOLS
  8. (
  9.    account_number "4367421823250099999",
  10.    sub_number "00000",
  11.    transac_date position(1:8)  DATE(8) "YYYYMMDD" TERMINATED BY ',',  
  12.    transac_address   position(10)   char  TERMINATED BY ',',              
  13.    out_amount decimal external  TERMINATED BY ','  nullif out_amount=blanks,
  14.    in_amount decimal external  TERMINATED BY ',' nullif in_amount=blanks  ,
  15.    balance decimal external  TERMINATED BY ',' nullif balance=blanks,
  16.    opposite_number char  TERMINATED BY ',',     
  17.    opposite_username char  TERMINATED BY ',',                                   
  18.    currency char  TERMINATED BY ',',
  19.    transac_comment  char  TERMINATED BY whitespace               
  20. )
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-3-28 23:02 , Processed in 0.133981 second(s), 36 queries .

快速回复 返回顶部 返回列表