轉載:Oracle審計功能(Oracle10g)

xingfei80發表於2012-09-12

1、什麼是審計

審計(Audit)用於監視使用者所執行的資料庫操作,審計記錄可存在資料字典表(稱為審計記錄:儲存在system表空間中的SYS.AUD$中,可透過檢視dba_audit_trail檢視)或作業系統審計記錄中(預設位置為$ORACLE_BASE/admin/$ORACLE_SID/adump/).。預設情況下審計是沒有開啟的。

當資料庫的審計是使能的,在語句執行階段產生審計記錄。

審計記錄包含:

(1)有審計的操作、

(2)使用者執行的操作、

(3)操作的日期和時間等資訊。

不管你是否開啟資料庫的審計功能,以下這些作業系統會強制記錄:用管理員許可權連線Instance;啟動資料庫;關閉資料庫。

ORACLE審計功能

審計是對選定的使用者動作的監控和記錄,通常用於:

<wbr><wbr><wbr>審查可疑的活動。例如:資料被非授權使用者所刪除,此時安全管理員可決定對該資料庫的所有連線進行審計,以及對資料庫的所有表的成功地或不成功地刪除進行審計。

監視和收集關於指定資料庫活動的資料。例如:DBA可收集哪些被修改、執行了多少次邏輯的I/O等統計資料。

ORACLE所允許的審計選擇限於下列方面:

<wbr><wbr>審計語句的成功執行、不成功執行,或者其兩者。

<wbr><wbr>對每一使用者會話審計語句執行一次或者對語句每次執行審計一次。

<wbr><wbr>對全部使用者或指定使用者的活動的審計。

[@more@]

<wbr>

審計相關的表安裝、轉移

SQLPLUS> connect / AS SYSDBA

<wbr>SQLPLUS> select * from sys.aud$; <wbr><wbr><wbr><wbr>--沒有記錄返回 <wbr>

<wbr>SQLPLUS> select * from dba_audit_trail; <wbr><wbr>- 沒有記錄返回

<wbr>如果做上述查詢的時候發現表不存在,說明審計相關的表還沒有安裝,需要安裝。<wbr>

<wbr>SQLPLUS> connect / as sysdba

<wbr>SQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql

<wbr>審計表安裝在SYSTEM表空間。所以要確保SYSTEM表空間又足夠的空間存放審計資訊。

安裝後要重啟資料庫

將審計相關的表移動到其他表空間

由於AUD$表等審計相關的表存放在SYSTEM表空間,因此為了不影響系統的效能,保護SYSTEM表空間,最好把AUD$移動到其他的表空間上。可以使用下面的語句來進行移動:<wbr>

sql>connect / as sysdba;

<wbr>

sql>alter table aud$ move tablespace ;

sql>alter index I_aud1 rebuild online tablespace ;

<wbr>

SQL> alter table audit$ move tablespace ;

SQL> alter index i_audit rebuild online tablespace ;

<wbr>

SQL> alter table audit_actions move tablespace ;

SQL> alter index i_audit_actions rebuild online tablespace ;

2、和審計相關的兩個主要引數

Audit_sys_operations

預設為false,當設定為true時,所有sys使用者(包括以sysdba, sysoper身份登入的使用者)的操作都會被記錄,audit trail不會寫在aud$表中,這個很好理解,如果資料庫還未啟動aud$不可用,那麼像conn /as sysdba這樣的連線資訊,只能記錄在其它地方。如果是Windows平臺,audti trail會記錄在windows的事件管理中,如果是linux/unix平臺則會記錄在audit_file_dest引數指定的檔案中。

Audit_trail

None:是預設值,不做審計;

DB:將audit trail 記錄在資料庫的審計相關表中,如aud$,審計的結果只有連線資訊;

DB,Extended:這樣審計結果裡面除了連線資訊還包含了當時執行的具體語句;

OS:將audit trail 記錄在作業系統檔案中,檔名由audit_file_dest引數指定;

XML:10g裡新增的。

注:這兩個引數是static引數,需要重新啟動資料庫才能生效。

3、審計級別

當開啟審計功能後,可在三個級別對資料庫進行審計:Statement(語句)、Privilege(許可權)、object(物件)。

3.1 <wbr>Statement:

語句審計,對某種型別的SQL語句審計,不指定結構或物件。比如audit table 會審計資料庫中所有的create table,drop table,truncate table語句,alter session by cmy會審計cmy使用者所有的資料庫連線。

3.2 <wbr>Privilege:

許可權審計,當使用者使用了該許可權則被審計,如執行grant select any table to a,當執行了audit select any table語句後,當使用者a 訪問了使用者b的表時(如select * from b.t)會用到select any table許可權,故會被審計。注意使用者是自己表的所有者,所以使用者訪問自己的表不會被審計。 特權審計。

3.3 <wbr>Object:

物件審計,對一特殊模式物件上的指定語句的審計. 如審計on關鍵字指定物件的相關操作,如aduit alter,delete,drop,insert on cmy.t by scott; 這裡會對cmy使用者的t表進行審計,但同時使用了by子句,所以只會對scott使用者發起的操作進行審計。

注意:Oracle沒有提供對schema中所有物件的審計功能,只能一個一個物件審計,對於後面建立的物件,Oracle則提供on default子句來實現自動審計,比如執行audit drop on default by access;後,對於隨後建立的物件的drop操作都會審計。但這個default會對之後建立的所有資料庫物件有效,似乎沒辦法指定只對某個使用者建立的物件有效,想比 trigger可以對schema的DDL進行“審計”,這個功能稍顯不足。

4、審計的一些其他選項

4.1 by access / by session:

by access <wbr>每一個被審計的操作都會生成一條audit trail。

by session 一個會話裡面同型別的操作只會生成一條audit trail,預設為by session。

4.2 whenever [not] successful:

whenever successful 操作成功(dba_audit_trail中returncode欄位為0) 才審計,

whenever not successful 反之。省略該子句的話,不管操作成功與否都會審計。

5、和審計相關的檢視

5.1 dba_audit_trail:儲存所有的audit trail,實際上它只是一個基於aud$的檢視。其它的檢視dba_audit_session,dba_audit_object, dba_audit_statement都只是dba_audit_trail的一個子集。

5.2 dba_stmt_audit_opts:可以用來檢視statement審計級別的audit options,即資料庫設定過哪些statement級別的審計。dba_obj_audit_opts,dba_priv_audit_opts檢視功能與之類似

5.3 all_def_audit_opts:用來檢視資料庫用on default子句設定了哪些預設物件審計。

6、取消審計

將對應審計語句的audit改為noaudit即可,

如audit session whenever successful

對應的取消審計語句為noaudit session whenever successful;

7、10g中的審計告知一切

Oracle 資料庫 10g 審計以一種非常詳細的級別捕獲使用者行為,它可以消除手動的、基於觸發器的審計。

假定使用者 Joe 具有更新那張表的許可權,並按如下所示的方式更新了表中的一行資料:

update SCOTT.EMP set salary = 12000 where empno = 123456;

您如何在資料庫中跟蹤這種行為呢?在 Oracle 9i 資料庫及其較低版本中,審計只能捕獲“誰”執行此操作,而不能捕獲執行了“什麼”內容。例如,它讓您知道 Joe 更新了 SCOTT 所有的表EMP,但它不會顯示他更新了該表中員工號為 123456 的薪水列。它不會顯示更改前的薪水列的值 — 要捕獲如此詳細的更改,您將不得不編寫您自己的觸發器來捕獲更改前的值,或使用 LogMiner 將它們從存檔日誌中檢索出來。

細粒度審計(FGA):精細審計 ,是在 Oracle 9i 中引入的,能夠記錄 SCN 號和行級的更改以重建舊的資料,但是它們只能用於 select 語句,而不能用於 DML ,如 update 、insert 和delete 語句。因此,對於 Oracle 資料庫 10g 之前的版本,使用觸發器雖然對於以行級跟蹤使用者初始的更改是沒有吸引力的選擇,但它也是唯一可靠的方法。

8.審計的相關基本操作

8.1 <wbr>審計功能的引數控制

audit_trail 引數的值可以設定為以下幾種

1. NONE:不開啟

2. DB:開啟審計功能

3. OS:審計記錄寫入一個作業系統檔案。

4. TRUE:與引數DB一樣

5. FALSE:不開啟審計功能。

這個引數是寫道spfile裡面的,需要重啟資料庫

8.2 <wbr>檢視是否審計功能是否啟動

SQL> show parameter audit

NAME <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>TYPE <wbr><wbr><wbr><wbr><wbr><wbr><wbr>VALUE

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

audit_file_dest <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string <wbr><wbr><wbr><wbr><wbr>/u01/app/oracle/admin/ORCL/adump

audit_sys_operations <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>boolean <wbr><wbr><wbr><wbr>FALSE

audit_syslog_level <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string

audit_trail <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string <wbr><wbr><wbr><wbr><wbr>NONE

8.3 開啟審計

SQL> conn /as sysdba

SQL> show parameter audit

NAME <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>TYPE <wbr><wbr><wbr><wbr><wbr><wbr><wbr>VALUE

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

audit_file_dest <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string <wbr><wbr><wbr><wbr><wbr>/u01/app/oracle/admin/ORCL/adump

audit_sys_operations <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>boolean <wbr><wbr><wbr><wbr>FALSE

audit_syslog_level <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string

audit_trail <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string <wbr><wbr><wbr><wbr><wbr>NONE

SQL> alter system set audit_sys_operations=TRUE scope=spfile; <wbr><wbr><wbr>--審計管理使用者(以sysdba/sysoper角色登陸)

SQL> alter system set audit_trail=db,extended scope=spfile;

開啟審計要重啟例項

SQL> show parameter audit

NAME <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>TYPE <wbr><wbr><wbr><wbr><wbr><wbr><wbr>VALUE

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

audit_file_dest <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string <wbr><wbr><wbr><wbr><wbr>/u01/app/oracle/admin/ORCL/adump

audit_sys_operations <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>boolean <wbr><wbr><wbr><wbr>TRUE

audit_syslog_level <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string

audit_trail <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string <wbr><wbr><wbr><wbr><wbr>DB, EXTENDED <wbr><wbr><wbr><wbr><wbr>

<wbr>

8.4 <wbr>關閉審計

SQL> conn /as sysdba

SQL> show parameter audit

SQL> alter system set audit_trail=none;

關閉審計也需要重啟例項

9. 審計例項

9.1 啟用審計

SQL> conn sys/admin as sysdba

已連線。

SQL> show parameter audit

NAME <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>TYPE <wbr><wbr><wbr><wbr><wbr><wbr><wbr>VALUE

------------------------------------ <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>----------- ------------------------------

audit_file_dest <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string <wbr><wbr><wbr><wbr><wbr>D:ORACLEADMINDBAADUMP

audit_sys_operations <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>boolean <wbr><wbr><wbr><wbr>FALSE

audit_trail <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string <wbr><wbr><wbr><wbr><wbr>NONE

SQL> alter system set audit_sys_operations=TRUE scope=spfile; --審計管理使用者(以sysdba/sysoper角色登陸)

SQL> alter system set audit_trail=db,extended scope=spfile;

SQL>startup force;

SQL> show parameter audit

NAME <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>TYPE <wbr><wbr><wbr><wbr><wbr><wbr><wbr>VALUE

------------------------------------ <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>----------- ------------------------------

audit_file_dest <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string <wbr><wbr><wbr><wbr><wbr>D:ORACLEADMINDBAADUMP

audit_sys_operations <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>boolean <wbr><wbr><wbr><wbr>TRUE

audit_trail <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string <wbr><wbr><wbr><wbr><wbr>DB, EXTENDED

9.2 開始審計

注意:無法對 SYS 使用者操作執行 audit 或 noaudit 命令

SQL> conn <wbr>system/admin

SQL> audit all on test;

SQL> commit;

SQL> delete from test;

SQL> commit;

SQL> select OS_USERNAME,USERNAME,USERHOST,TERMINAL,TIMESTAMP,OWNER,

obj_name,ACTION_NAME,sessionid,os_process,sql_text from dba_audit_trail;

OS_USER USERNAME USERHOST <wbr><wbr>TERMINAL <wbr><wbr><wbr><wbr><wbr><wbr><wbr>TIMESTAMP <wbr><wbr><wbr><wbr><wbr>OWNER

------- <wbr><wbr>-------- --------------- --------------- -------------- ----------------

user <wbr><wbr><wbr>SYSTEM <wbr><wbr>WORKGROUPHFCC- HFCC-KF-3068 <wbr><wbr><wbr>22-10月-09 <wbr><wbr><wbr><wbr>SYSTEM

SQL> audit select table by test by access;

如果在命令後面新增by user則只對user的操作進行審計,如果省去by使用者,則對系統中所有的使用者進行審計(不包含sys使用者).

例:

AUDIT DELETE ANY TABLE; --審計刪除表的操作

AUDIT DELETE ANY TABLE WHENEVER NOT SUCCESSFUL; --只審計刪除失敗的情況

AUDIT DELETE ANY TABLE WHENEVER SUCCESSFUL; --只審計刪除成功的情況

AUDIT DELETE,UPDATE,INSERT ON user.table by SYSTEM; --審計SYSTEM使用者對錶user.table的delete,update,insert操作

9.3 撤銷審計

SQL> noaudit all on t_test;

<wbr>

10.FGA策略(細粒度審計)

DBMS_FGA是SYS使用者的一個包

10.1 增加 FGA 策略

-- 審計表
GRANT RESOURCE,CONNECT TO BANK IDENTIFIED BY BANK;

CREATE TABLE BANK.ACCOUNTS
(
<wbr>ACCT_NO NUMBER PRIMARY KEY,
<wbr>CUST_ID NUMBER NOT NULL ,
<wbr>BALANCE NUMBER(15,2) NULL
);
insert into bank.accounts values(1,1,10000);
insert into bank.accounts values(2,2,20000);
commit;

Begin
dbms_fga.drop_policy (
<wbr>object_schema=>'BANK',
<wbr>object_name=>'ACCOUNTS',
<wbr>policy_name=>'ACCOUNTS_ACCESS');
dbms_fga.add_policy (
<wbr>object_schema=>'BANK',
<wbr>object_name=>'ACCOUNTS',
<wbr>policy_name=>'ACCOUNTS_ACCESS');
end;
/

select * from bank.accounts;
select timestamp, db_user,os_user,object_schema,object_name,sql_text <wbr>from dba_fga_audit_trail;

-- 審計列和審計條件, 在add_policy中加入
-- <wbr><wbr>audit_column => 'BALANCE'
-- <wbr><wbr>audit_condition => 'BALANCE >= 11000'

Begin
dbms_fga.drop_policy (
<wbr>object_schema=>'BANK',
<wbr>object_name=>'ACCOUNTS',
<wbr>policy_name=>'ACCOUNTS_ACCESS');

dbms_fga.add_policy (
<wbr>object_schema=>'BANK',
<wbr>object_name=>'ACCOUNTS',
<wbr>audit_column => 'BALANCE',
<wbr>audit_condition => 'BALANCE >= 11000',
<wbr>policy_name=>'ACCOUNTS_ACCESS');
end;
/

select BALANCE from bank.accounts;
select timestamp, db_user,os_user,object_schema,object_name,sql_text <wbr>from dba_fga_audit_trail;

10.2 管理 FGA 策略
--要刪除策略,您可以使用以下語句:
begin
dbms_fga.drop_policy (
object_schema => 'BANK',
object_name => 'ACCOUNTS',
policy_name => 'ACCOUNTS_ACCESS'
<wbr><wbr>);
end;
/

-- 對於更改策略而言,沒有隨取隨用的解決方案。要更改策略中的任何引數,必須刪除策略,再使用更改後的引數新增策略。

-- 需要臨時禁用審計收集 — 例如,如果您希望將線索表移動到不同的表空間或者要刪除線索表。您可以按如下方法禁用 FGA 策略:
begin
dbms_fga.enable_policy (
object_schema => 'BANK',
object_name => 'ACCOUNTS',
policy_name => 'ACCOUNTS_ACCESS',
enable => FALSE
<wbr><wbr>);
end;
/
-- 重新啟用很簡單 enable =>; TRUE

--演示何時審計操作以及何時不審計操作的各種情況 SQL 語句 審計狀態

select balance from bank.accounts; <wbr><wbr>進行審計。使用者選擇了在新增策略時所指定的審計列 BALANCE。
select * from <wbr>bank.accounts; <wbr><wbr><wbr><wbr><wbr>進行審計。即使使用者沒有明確指定列 BALANCE,* 也隱含地選擇了它。
select cust_id from bank.accounts where balance < 10000; 進行審計。即使使用者沒有明確指定列 BALANCE,where 子句也隱含地選擇了它。
select cust_id from bank.accounts; <wbr><wbr>不進行審計。使用者沒有選擇列 BALANCE。
select count(*) from bank.accounts; <wbr>不進行審計。使用者沒有明確或隱含地選擇列 BALANCE。

10.3 <wbr>處理器模組
-- FGA 的功能不只是記錄審計線索中的事件;FGA 還可以任意執行過程。
-- 過程可以執行一項操作,比如當使用者從表中選擇特定行時向審計者傳送電子郵件警告,或者可以寫到不同的審計線索中。
-- 這種儲存程式碼段可以是獨立的過程或者是程式包中的過程,稱為策略的處理器模組。
-- 實際上由於安全性原因,它不必與基表本身處於同一模式中,您可能希望特意將它放置在不同的模式中。
-- 由於只要 SELECT 出現時過程就會執行,非常類似於 DML 語句啟動的觸發器,您還可以將其看作 SELECT 語句觸發器。

-- 以下引數指定將一個處理器模組指定給策略:
-- <wbr>handler_schema 擁有資料過程的模式
-- <wbr>handler_module 過程名稱
-- 處理器模組還可以採用程式包的名稱來代替過程名稱。在這種情況下,引數 handler_module 在 package.procedure 的格式中指定。

10.4 <wbr>FGA 資料字典檢視
-- FGA 策略的定義位於資料字典檢視 DBA_AUDIT_POLICIES 中。

-- 審計線索收集在 SYS 擁有的表 FGA_LOG$ 中。對於 SYS 擁有的任何原始表,此表上的某些檢視以對使用者友好的方式顯示資訊。DBA_FGA_AUDIT_TRAIL 是該表上的一個檢視。
-- 一個重要的列是 SQL_BIND,它指定查詢中使用的繫結變數的值 — 這是顯著增強該工具功能的一項資訊。
-- 另一個重要的列是 SCN,當發生特定的查詢時,它記錄系統更改號。
-- 此資訊用於識別使用者在特定時間看到了什麼,而不是現在的值,它使用了閃回查詢,這種查詢能夠顯示在指定的 SCN 值時的資料。

10.5 檢視和 FGA
-- 到目前為止已經討論了在表上應用 FGA;現在讓我們來看如何在檢視上使用 FGA。假定在 ACCOUNTS 表上定義檢視 VW_ACCOUNTS 如下:

create view bank.vw_accounts as select * from bank.accounts;

select * from bank.vw_accounts;
select timestamp, db_user,os_user,object_schema,object_name,sql_text <wbr>from dba_fga_audit_trail;

10.5.1 如果您只希望審計對檢視的查詢而不是對錶的查詢,可以對檢視本身建立策略。
-- 透過將檢視名稱而不是表的名稱傳遞給打包的過程 dbms_fga.add_policy 中的引數 object_name,可以完成這項工作。
-- 隨後 DBA_FGA_AUDIT_TRAIL 中的 OBJECT_NAME 列將顯示檢視的名稱,並且不會出現有關表訪問的附加記錄。

10.6 其它用途
<wbr>除了記錄對錶的選擇訪問,FGA 還可用於某些其它情況:
-- <wbr>您可以對資料倉儲使用 FGA,以捕獲特定的表、檢視或物化檢視上發生的所有語句,這有助於計劃索引。您不需要到 V$SQL 檢視去獲取這些資訊。即使 SQL 語句已經超出了 V$SQL 的期限,在 FGA 審計線索中將會始終提供它。
-- <wbr>由於 FGA 捕獲繫結變數,它可以幫助您瞭解繫結變數值的模式,這有助於設計直方圖集合等。
-- <wbr>處理器模組可以向審計者或 DBA 傳送警告,這有助於跟蹤惡意應用程式。
-- <wbr>由於 FGA 可以作為 SELECT 語句的觸發器,您可以在需要這種功能的任何時候使用它。

結論
<wbr>FGA 在 Oracle 資料庫中支援隱私和職能策略。因為審計發生在資料庫內部而不是應用程式中,所以無論使用者使用的訪問方法是什麼(透過諸如 SQL*Plus 等工具或者應用程式),都對操作進行審計,允許進行非常簡單的設定。<wbr>

資料字典檢視 DBA_AUDIT_POLICIES 中重要的列
-----------------------------------------------------------------------
OBJECT_SCHEMA <wbr><wbr>對其定義了 FGA 策略的表或檢視的所有者
OBJECT_NAME <wbr><wbr><wbr><wbr>表或檢視的名稱
POLICY_NAME <wbr><wbr><wbr><wbr>策略的名稱 — 例如,ACCOUNTS_ACCESS
POLICY_TEXT <wbr><wbr><wbr><wbr>在新增策略時指定的審計條件 — 例如,BALANCE >;= 11000
POLICY_COLUMN <wbr><wbr>審計列 — 例如,BALANCE
ENABLED <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>如果啟用則為 YES,否則為 NO <wbr>
PF_SCHEMA <wbr><wbr><wbr><wbr><wbr><wbr>擁有策略處理器模組的模式(如果存在)
PF_PACKAGE <wbr><wbr><wbr><wbr><wbr>處理器模組的程式包名稱(如果存在)
PF_FUNCTION <wbr><wbr><wbr><wbr>處理器模組的過程名稱(如果存在)<wbr>

資料字典檢視 DBA_FGA_AUDIT_TRAIL 中重要的列
-----------------------------------------------------------------------
SESSION_ID <wbr><wbr><wbr><wbr><wbr>審計會話識別符號;與 V$SESSION 檢視中的會話識別符號不同
TIMESTAMP <wbr><wbr><wbr><wbr><wbr><wbr>審計記錄生成時的時間標記
DB_USER <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>發出查詢的資料庫使用者
OS_USER <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>作業系統使用者
USERHOST <wbr><wbr><wbr><wbr><wbr><wbr><wbr>使用者連線的機器的主機名
CLIENT_ID <wbr><wbr><wbr><wbr><wbr><wbr>客戶識別符號(如果由對打包過程 dbms_session.set_identifier 的呼叫所設定)
EXT_NAME <wbr><wbr><wbr><wbr><wbr><wbr><wbr>外部認證的客戶名稱,如 LDAP 使用者
OBJECT_SCHEMA <wbr><wbr>對該表的訪問觸發了審計的表所有者
OBJECT_NAME <wbr><wbr><wbr><wbr>對該表的 SELECT 操作觸發了審計的表名稱
POLICY_NAME <wbr><wbr><wbr><wbr>觸發審計的策略名稱(如果對錶定義了多個策略,則每個策略將插入一條記錄。在此情況下,該列顯示哪些行是由哪個策略插入的。)
SCN <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>記錄了審計的 Oracle 系統更改號
SQL_TEXT <wbr><wbr><wbr><wbr><wbr><wbr><wbr>由使用者提交的 SQL 語句 <wbr>
SQL_BIND <wbr><wbr><wbr><wbr><wbr><wbr><wbr>由 SQL 語句使用的繫結變數(如果存在)

<wbr>

結論

1. <wbr><wbr><wbr><wbr><wbr><wbr>對錶的審計:可以單獨對錶的create,alter進行審計,如果要對drop操作進行審計需要對錶加audit table(該命令包含有create table、drop table、truncate table);

audit alter table (該命令包含了 alter table ).
2. 對檢視的審計:可以單獨對檢視的create進行審計,如果要對drop操作進行審計需要對檢視加audit view(該命令包含有create view,drop view).
3. 對程式包的審計:可以對包(函式,儲存過程等)的create進行審計,如果需要對drop操作進行審計需要加audit procedure(該命令對CREATE FUNCTION, CREATE LIBRARY , CREATE PACKAGE, CREATE PACKAGE BODY, CREATE PROCEDURE, DROP FUNCTION, DROP LIBRARY, DROP PACKAGE, DROP PROCEDURE進行審計)
4. 對使用者的審計:可以透過audit user(該命令包含 create user,alter user,drop user)進行審計.

5、使用如下語句:

audit insert table;
audit update table;
audit delete table;
audit select table;

可以對所有使用者(不包含sys使用者)下的表進行insert、update、delete、select 審計。<wbr>

例項:

<wbr>

<wbr>1、select * from dba_audit_trail;

<wbr><wbr>其中有“returncode”列:0,代表語句執行正常;非0,代表語句執行異常;有待驗證

3、對於 drop table 語句的稽核只能是 audit table; <wbr>
如果僅僅是對 alter any table 系統許可權進行稽核,當使用者使用 alter table 語句修改使用者所擁有的表時,是不會差生任何稽核記錄,因為沒有用到 alter any table 系統許可權。

4、AUDIT table BY ACCESS 對 drop table、alter table 和 create table 語句進行稽核。

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

相關文章