ORACLE AUDIT

Davis_itpub發表於2018-06-27

審計(Audit)用於監視使用者所執行的資料庫操作,並且Oracle 會將審計跟蹤結果存放到OS 檔案(預設位置為$ORACLE_BASE/admin /$ORACLE_SID/adump/),或資料庫(儲存在system 表空間中的SYS.AUD$表中,可透過檢視dba_audit_trail 檢視)中。審計可以提供有用的資訊,用於揭示許可權的濫用和誤用。當需要一定的粒度時,DBA 可以使用細粒度的審計來監控對錶中某些行或列的訪問,而不僅僅是是否訪問表。

 

在oracle 11g 中,審計功能(AUDIT_TRAIL)是預設開啟的。審計資料預設存放SYSTEM 表空間下的AUD$審計字典基表上。開啟審計資料庫會增加消耗,降低業務效能,因此,如果不是很必要,在安裝好資料庫後,可適當選擇關閉資料庫審計功能。

 

Oracle 公司還推薦使用基於OS 檔案的審計日誌記錄方式(OSaudit trail files),當AUDIT_TRAIL 設定為OS 時,審計記錄檔案將在AUDIT_FILE_DEST 引數所指定的目錄中生成。

 

一、審計型別

語句審計

按照語句型別審計SQL 語句,而不論訪問何種特定的模式物件。也可以在資料庫中指定一個或多個使用者,針對特定的語句審計這些使用者

許可權審計

審計系統許可權,例如CREATE TABLE ALTER INDEX。和語句審計一樣,許可權審計可以指定一個或多個特定的使用者作為審計的目標

模式物件審計

審計特定模式物件上執行的特定語句(例如,DEPARTMENTS 表上的UPDATE 語句)。模式物件審計總是應用於資料庫中的所有使用者

細粒度的審計

根據訪問物件的內容來審計訪問和許可權。使用程式包DBMS_FGA 來建立特定表上的策略

 

二、審計位置

審計記錄可以傳送到SYS.AUD$資料庫表或作業系統檔案。為了啟用審計並指定記錄審計記錄的位置,將初始引數AUDIT_TRAIL 設定為如下幾個值之一:

NONE, FALSE

 禁用審計

OS

啟用審計將審計記錄傳送到作業系統檔案

DB, TRUE

 啟用審計,將審計記錄傳送到SYS.AUD$

DB_EXTENDED

啟用審計,將審計記錄傳送到SYS.AUD$表,並在CLOB SQLBIND SQLTEXT 中記錄額外的資訊

XML

 啟用審計,以XML 格式寫所有審計記錄

EXTENDED

 啟用審計,在審計跟蹤中記錄所有列,包括SqlText SqlBind 的值

 

引數AUDIT_TRAIL 不是動態的,為了使AUDIT_TRAIL 引數中的改動生效,必須關閉資料庫並重新啟動。在對SYS.AUD$表進行審計時,應該注意監控該表的大小,以避免影響SYS 表空間中其他物件的空間需求。推薦週期性歸檔SYS.AUD$中的行,並且擷取該表。

 

在Oracle11g 中CREATE SESSION 作為受審計的許可權來被記錄,因此當SYSTEM 表空間因磁碟空間而無法擴充套件時將導致這部分審計記錄無法生成,這將最終導致普通使用者的新會話將無法正常建立,普通使用者將無法登陸資料庫。在這種場景中仍可以使用SYSDBA 身份的使用者建立會話,在將審計資料合適備份後刪除一部分記錄,或者TRUNCATE AUD$都可以解決上述問題。在預設情況下會以AUTOEXTEND ON 自動擴充套件選項建立SYSTEM 表空間,因此係統表空間在必要時會自動增長,我們所需注意的是磁碟上的剩餘空間是否能夠滿足其增長需求,以及資料檔案擴充套件的上限,對於普通的8k smallfile 表空間而言單個資料檔案的最大尺寸是32G。

 

三、開戶審計功能

SQL> alter system set audit_trail=db_extended scope=spfile;

重啟資料庫生效:

SQL> startup force

 

四、語句審計:

對於語句審計,audit 命令的格式看起來如下所示:

AUDIT sql_statement_clause BY {SESSION |ACCESS}WHENEVER [NOT] SUCCESSFUL;

引數如下:

sql_statement_clause 包含很多條不同的資訊,例如希望審計的SQL 語句型別以及審計什麼人。

by access 在每次動作發生時都對其進行審計,by session 只審計一次。預設是by session。

whenever successful 審計成功的動作:沒有生成錯誤訊息的語句。

whenever not successful 審計語句的命令是否失敗

 

對於大多數類別的審計方法,如果確實希望審計所有型別的表訪問或某個使用者的任何許可權,則可以指定all 而不是單個的語句型別或物件。

 

表1-1 列出了可以審計的語句型別,並且在每個類別中包含了相關語句的簡要描述。如果指定all,則審計該列表中的任何語句。然而,表1-2 中的語句型別在啟用審計時不屬於all 類別;必須在audit 命令中顯式地指定它們。

 

表1-1 包括在ALL 類別中的可審計語句

句 選 項

SQL 操作

ALTER SYSTEM

所有ALTER SYSTEM 選項,例如,動態改變例項參

數,切換到下一個日誌檔案組,以及終止使用者會話

CLUSTER

CREATEALTERDROP TRUNCATE 叢集

CONTEXT

CREATE CONTEXT DROP CONTEXT

DATABASE LINK

CREATE DROP 資料庫連結

DIMENSION

CREATEALTER DROP 維數

DIRECTORY

 CREATE DROP 目錄

INDEX

CREATEALTER DROP 索引

MATERIALIZED VIEW

CREATEALTER DROP 物化檢視

NOT EXISTS

由於不存在的引用物件而造成的SQL 語句的失敗

PROCEDURE

 CREATE DROP FUNCTIONLIBRARYPACKAGE

PACKAGE BODY PROCEDURE

PROFILE

 CREATEALTER DROP 配置檔案

PUBLIC DATABASE LINK

CREATE DROP 公有資料庫連結

PUBLIC SYNONYM

 CREATE DROP 公有同義詞

ROLE

CREATEALTERDROP SET 角色

ROLLBACK

SEGMENT CREATEALTER DROP 回滾段

SEQUENCE

 CREATE DROP 序列

SESSION

 登入和退出

SYNONYM

 CREATE DROP 同義詞

SYSTEM

 AUDIT 系統許可權的AUDIT NOAUDIT

SYSTEM GRANT

 GRANT REVOKE 系統許可權和角色

TABLE

CREATEDROP TRUNCATE

TABLESPACE

 CREATEALTER DROP 表空間

TRIGGER

 CREATEALTER(啟用/禁用)DROP 觸發器;具有

ENABLE ALL TRIGGERS DISABLE ALL

TRIGGERS ALTER TABLE

TYPE

CREATEALTER DROP 型別以及型別主體

USER

CREATEALTER DROP 使用者

VIEW

CREATE DROP 檢視

 

 

 

表1-2 顯式指定的語句型別

句 選 項

SQL 操 作

ALTER SEQUENCE

 任何ALTER SEQUENCE 命令

ALTER TABLE

任何ALTER TABLE 命令

COMMENT TABLE

 新增註釋到表、檢視、物化檢視或它們中的任何列

DELETE TABLE

 刪除表或檢視中的行

EXECUTE PROCEDURE

 執行程式包中的過程、函式或任何變數或遊標

GRANT DIRECTORY

 GRANT REVOKE DIRECTORY 物件上的許可權

GRANT PROCEDURE

 GRANT REVOKE 過程、函式或程式包上的許可權

GRANT SEQUENCE

GRANT REVOKE 序列上的許可權

GRANT TABLE

 GRANT REVOKE 表、檢視或物化檢視上的許可權

GRANT TYPE

 GRANT REVOKE TYPE 上的許可權

INSERT TABLE

 INSERT INTO 表或檢視

LOCK TABLE

 表或檢視上的LOCK TABLE 命令

SELECT SEQUENCE

 引用序列的CURRVAL NEXTVAL 的任何命令

SELECT TABLE

 SELECT FROM 表、檢視或物化檢視

UPDATE TABLE

 在表或檢視上執行UPDATE

 

注意:

從Oracle Database 11g 開始,只有在初始引數AUDIT_TRAIL 被設定為DB_EXTENDED 時,才填充DBA_AUDIT_TRAIL 中的列SQL_TEXT 和SQL_BIND。預設情況下,AUDIT_TRAIL 的值是DB。

 

示例

[oracle@ocp Desktop]$ rlwrap sqlplus / as sysdba

SYS@orcl>show parameter audit_trail

SYS@orcl> alter system set audit_trail=db_extended

scope=spfile;

SYS@orcl> startup force

SYS@orcl>show parameter audit_trail

SYS@orcl> alter user scott account unlock identified by

scott;

SYS@orcl> audit create table by scott by access;

SYS@orcl>select user_name,audit_option,success,failure from

dba_stmt_audit_opts where user_name='SCOTT';

SYS@orcl> conn scott/scott

SCOTT@orcl> create table tt(id int);

SCOTT@orcl> conn / as sysdba

SYS@orcl>select username,to_char(timestamp,'MM/DD/YY

HH24:MI') Timestamp,obj_name, action_name, sql_text from

dba_audit_trail where username= 'SCOTT';

 

使用noaudit 命令關閉審計,如下所示:

SYS@orcl> noaudit create table by scott;

SYS@orcl> conn scott/scott

SCOTT@orcl> create table ee(id int);

SCOTT@orcl> conn / as sysdba

SYS@orcl>select username,to_char(timestamp,'MM/DD/YY

HH24:MI') Timestamp,obj_name, action_name, sql_text from

dba_audit_trail where username= 'SCOTT';

 

五、許可權統計

審計系統許可權具有與語句審計相同的基本語法,但審計系統許可權是在sql_statement_clause 中,而不是在語句中,指定系統許可權。

 

例如,將ALTER TABLESPACE 許可權授予所有的DBA,生成審計記錄。啟用對這種許可權的審計的命令:

audit alter tablespace by access whenever successful;

每次成功使用ALTER TABLESPACE 許可權時,都會將一行內容新增到SYS.AUD$。

 

使用SYSDBA 和SYSOPER 許可權或者以SYS 使用者連線到資料庫的系統管理員可以利用特殊的審計。為了啟用這種額外的審計級別,可以設定初始引數AUDIT_SYS_OPERATIONS 為TRUE。這種審計記錄傳送到與作業系統審計記錄相同的位置。當使用其中一種許可權時執行的所有SQL 語句,以及作為使用者SYS 執行的任何SQL 語句,都會傳送到作業系統審計位置。

 

SYS@orcl> alter system set AUDIT_SYS_OPERATIONS=true

scope=spfile;

SYS@orcl> startup force

[oracle@ocp Desktop]$ cd /u01/app/oracle/admin/orcl/adump/

Vi 檢視審計內容

 

 

許可權審計示例:

SYS@orcl> audit create table by scott by access;

SYS@orcl> audit session by scott;

SYS@orcl> select user_name,privilege,success,failure from

dba_priv_audit_opts where user_name='SCOTT' order by

user_name;

SYS@orcl> conn scott/scott

SCOTT@orcl> create table tt(id int);

SCOTT@orcl> conn / as sysdba

SYS@orcl>select username,to_char(timestamp,'MM/DD/YY

HH24:MI') Timestamp,obj_name, action_name, sql_text from

dba_audit_trail where username= 'SCOTT';

SYS@orcl> noaudit create table by scott;

 

六、物件審計

AUDIT schema_object_clause BY {SESSION | ACCESS}WHENEVER [NOT] SUCCESSFUL;

schema_object_clause 指定物件訪問的型別以及訪問的物件。

 

可以審計特定物件上14 種不同的操作型別。物件審計選項如下:

象 選 項

說 明

ALTER

改變表、序列或物化檢視

AUDIT

審計任何物件上的命令

COMMENT

新增註釋到表、檢視或物化檢視

DELETE

從表、檢視或物化檢視中刪除行

EXECUTE

執行過程、函式或程式包

FLASHBACK

執行表或檢視上的閃回操作

GRANT

 授予任何型別物件上的許可權

INDEX

 建立表或物化檢視上的索引

INSERT

將行插入表、檢視或物化檢視中

LOCK

鎖定表、檢視或物化檢視

READ

DIRECTORY 物件的內容執行讀操作

RENAME

重新命名錶、檢視或過程

SELECT

從表、檢視、序列或物化檢視中選擇行

UPDATE

更新表、檢視或物化檢視

 

 

物件審計示例:

SYS@orcl>show parameter audit_trail

SYS@orcl> alter system set audit_trail=db_extended

scope=spfile;

SYS@orcl>show parameter audit_trail

SYS@orcl> startup force

SYS@orcl> alter user scott account unlock identified by

scott;

SYS@orcl> audit select,insert,delete on scott.dept by

access;

SYS@orcl> select

object_name,object_type,alt,del,ins,upd,sel from

dba_obj_audit_opts;

SYS@orcl> conn scott/scott

SCOTT @orcl> insert into dept values(11,'aa','aa');

SCOTT @orcl> insert into dept values(12,'bb','bb');

SCOTT @orcl> commit;

SCOTT@orcl> conn / as sysdba

SYS@orcl> select timestamp,action_name,sql_text from

dba_audit_trail where owner='SCOTT';

SYS@orcl> noaudit select,insert,delete on scott.dept;

 

審計查詢

SYS@orcl>show parameter audit_trail

SYS@orcl> alter system set audit_trail=db_extended

scope=spfile;

SYS@orcl> startup force

SYS@orcl>show parameter audit_trail

SYS@orcl> alter user scott account unlock identified by

scott;

SYS@orcl> audit select,insert,delete on scott.dept by

access;

SYS@orcl>delete sys.aud$;

SYS@orcl> conn scott/scott

SCOTT @orcl> insert into dept values(13,'cc','cc');

SCOTT @orcl>select * from dept;

SCOTT @orcl>delete from dept where deptno=11;

SCOTT @orcl>update dept set loc='abc' where deptno=12;

SCOTT@orcl> conn / as sysdba

SYS@orcl>select

username,timestamp,owner,action_name,obj_name from

dba_audit_object;

 

七、細粒度的審計

細粒度的物件審計,或稱為FGA,審計變得更為關注某個方面,並且更為精確。由稱為DBMS_FGA 的PL/SQL 程式包實現FGA。

 

使用標準的審計,可以輕鬆發現訪問了哪些物件以及由誰訪問,但無法知道訪問了哪些行或列。細粒度的審計可解決這個問題,它不僅為需要訪問的行指定謂詞(或where 子句),還指定了表中訪問的列。透過只在訪問某些行和列時審計對錶的訪問,可以極大地減少審計表條目的數量。

 

程式包DBMS_FGA 具有4 個過程:

ADD_POLICY 新增使用謂詞和審計列的審計策略

DROP_POLICY 刪除審計策略

DISABLE_POLICY 禁用審計策略,但保留與表或檢視關聯的策略

ENABLE_POLICY 啟用策略

 

使用者wl 通常每天訪問HR.EMPLOYEES 表,查詢僱員的電子郵件地址。系統管理員懷疑wl 正在檢視經理們的薪水資訊,因此他們建立一個FGA 策略,用於審計任何經理對SALARY 列的任何訪問。

 

可以使用資料字典檢視DBA_FGA_AUDIT_TRAIL 訪問細粒度審計的審計記錄。如果一般需要檢視標準的審計行和細粒度的審計行,則資料字典檢視DBA_COMMON_AUDIT_TRAIL 結合了這兩種審計型別中的行。

 

示例如下:

[oracle@ocp Desktop]$ rlwrap sqlplus / as sysdba

SYS@orcl>show parameter audit_trail

SYS@orcl> alter system set audit_trail=db_extended

scope=spfile;

SYS@orcl> startup force

SYS@orcl>show parameter audit_trail

SYS@orcl> create user wl identified by wl;

SYS@orcl> grant create session to wl;

SYS@orcl> grant select on hr.employees to wl;

SYS@orcl> alter user hr account unlock identified by hr;

SYS@orcl> begin

dbms_fga.add_policy(object_schema => 'HR',

object_name => 'EMPLOYEES',

policy_name => 'SAL_SELECT_AUDIT',

audit_condition => 'instr(job_id,''_MAN'') > 0',

audit_column => 'SALARY');

end;

/

SYS@orcl> conn wl/wl

WL@orcl> select employee_id, first_name, last_name, email

from hr.employees where employee_id = 114;

WL@orcl> conn / as sysdba

SYS@orcl> select to_char(timestamp,'mm/dd/yy hh24:mi')

timestamp,object_schema, object_name, policy_name,

statement_type from dba_fga_audit_trail where db_user =

'WL';

SYS@orcl> conn wl/wl

WL@orcl> select employee_id, first_name, last_name, salary

from hr.employees where employee_id = 114;

WL@orcl> conn / as sysdba

SYS@orcl> select to_char(timestamp,'mm/dd/yy hh24:mi')

timestamp,object_schema, object_name, policy_name,

statement_type from dba_fga_audit_trail where db_user =

'WL';

 

第一個查詢訪問經理資訊,但沒有訪問SALARY 列。第二個查詢與第一個查詢相同,但是訪問了SALARY 列,因此觸發了FGA 策略,從而在審計跟蹤中生成了一行

 

 

八、與審計相關的資料字典檢視

資料字典檢視

說 明

AUDIT_ACTIONS

包含審計跟蹤動作型別程式碼的描述,例如

INSERTDROP VIEWDELETELOGON LOCK

DBA_AUDIT_OBJECT

 與資料庫中物件相關的審計跟蹤記錄

DBA_AUDIT_POLICIES

 資料庫中的細粒度審計策略

DBA_AUDIT_SESSION

CONNECT DISCONNECT 相關的所有審計跟蹤記錄

DBA_AUDIT_STATEMENT

GRANTREVOKEAUDITNOAUDIT ALTER SYSTEM 命令相關的審計跟蹤條目

DBA_AUDIT_TRAIL

 包含標準審計跟蹤條目。USER_AUDIT_TRAIL 只包含已連線使用者的審計行

DBA_FGA_AUDIT_TRAIL

細粒度審計策略的審計跟蹤條目

DBA_COMMON_AUDIT_TRAIL

 將標準的審計行和細粒度的審計行結合在一個檢視中

DBA_OBJ_AUDIT_OPTS

 對資料庫物件生效的審計選項

DBA_PRIV_AUDIT_OPTS

 對系統許可權生效的審計選項

DBA_STMT_AUDIT_OPTS

 對語句生效的審計選項

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

相關文章