您好,登錄后才能下訂單哦!
審計(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 |
CREATE、ALTER、DROP 或TRUNCATE 集群 |
CONTEXT |
CREATE CONTEXT 或DROP CONTEXT |
DATABASE LINK |
CREATE 或DROP 數據庫鏈接 |
DIMENSION |
CREATE、ALTER 或DROP 維數 |
DIRECTORY |
CREATE 或DROP 目錄 |
INDEX |
CREATE、ALTER 或DROP 索引 |
MATERIALIZED VIEW |
CREATE、ALTER 或DROP 物化視圖 |
NOT EXISTS |
由于不存在的引用對象而造成的SQL 語句的失敗 |
PROCEDURE |
CREATE 或DROP FUNCTION、LIBRARY、PACKAGE、 PACKAGE BODY 或PROCEDURE |
PROFILE |
CREATE、ALTER 或DROP 配置文件 |
PUBLIC DATABASE LINK |
CREATE 或DROP 公有數據庫鏈接 |
PUBLIC SYNONYM |
CREATE 或DROP 公有同義詞 |
ROLE |
CREATE、ALTER、DROP 或SET 角色 |
ROLLBACK |
SEGMENT CREATE、ALTER 或DROP 回滾段 |
SEQUENCE |
CREATE 或DROP 序列 |
SESSION |
登錄和退出 |
SYNONYM |
CREATE 或DROP 同義詞 |
SYSTEM |
AUDIT 系統權限的AUDIT 或NOAUDIT |
SYSTEM GRANT |
GRANT 或REVOKE 系統權限和角色 |
TABLE |
CREATE、DROP 或TRUNCATE 表 |
TABLESPACE |
CREATE、ALTER 或DROP 表空間 |
TRIGGER |
CREATE、ALTER(啟用/禁用)、DROP 觸發器;具有 ENABLE ALL TRIGGERS 或DISABLE ALL TRIGGERS 的ALTER TABLE |
TYPE |
CREATE、ALTER 和DROP 類型以及類型主體 |
USER |
CREATE、ALTER 或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 hh34: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 hh34:mi')
timestamp,object_schema, object_name, policy_name,
statement_type from dba_fga_audit_trail where db_user =
'WL';
第一個查詢訪問經理信息,但沒有訪問SALARY 列。第二個查詢與第一個查詢相同,但是訪問了SALARY 列,因此觸發了FGA 策略,從而在審計跟蹤中生成了一行
八、與審計相關的數據字典視圖
數據字典視圖 |
說 明 |
AUDIT_ACTIONS |
包含審計跟蹤動作類型代碼的描述,例如 INSERT、DROP VIEW、DELETE、LOGON 和LOCK |
DBA_AUDIT_OBJECT |
與數據庫中對象相關的審計跟蹤記錄 |
DBA_AUDIT_POLICIES |
數據庫中的細粒度審計策略 |
DBA_AUDIT_SESSION |
與CONNECT 和DISCONNECT 相關的所有審計跟蹤記錄 |
DBA_AUDIT_STATEMENT |
與GRANT、REVOKE、AUDIT、NOAUDIT 和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 |
對語句生效的審計選項 |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。