轉載:Oracle審計功能(Oracle10g)
1、什麼是審計
審計(Audit)用於監視使用者所執行的資料庫操作,審計記錄可存在資料字典表(稱為審計記錄:儲存在system表空間中的SYS.AUD$表中,可透過檢視dba_audit_trail檢視)或作業系統審計記錄中(預設位置為$ORACLE_BASE/admin/$ORACLE_SID/adump/).。預設情況下審計是沒有開啟的。
當資料庫的審計是使能的,在語句執行階段產生審計記錄。
審計記錄包含:
(1)有審計的操作、
(2)使用者執行的操作、
(3)操作的日期和時間等資訊。
不管你是否開啟資料庫的審計功能,以下這些作業系統會強制記錄:用管理員許可權連線Instance;啟動資料庫;關閉資料庫。
ORACLE審計功能
審計是對選定的使用者動作的監控和記錄,通常用於:
監視和收集關於指定資料庫活動的資料。例如:DBA可收集哪些被修改、執行了多少次邏輯的I/O等統計資料。
ORACLE所允許的審計選擇限於下列方面:
審計相關的表安裝、轉移
SQLPLUS> connect / AS SYSDBA
安裝後要重啟資料庫
將審計相關的表移動到其他表空間
由於AUD$表等審計相關的表存放在SYSTEM表空間,因此為了不影響系統的效能,保護SYSTEM表空間,最好把AUD$移動到其他的表空間上。可以使用下面的語句來進行移動:
sql>connect / as sysdba;
sql>alter table aud$ move tablespace
sql>alter index I_aud1 rebuild online tablespace
SQL> alter table audit$ move tablespace
SQL> alter index i_audit rebuild online tablespace
SQL> alter table audit_actions move tablespace
SQL> alter index i_audit_actions rebuild online tablespace
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
語句審計,對某種型別的SQL語句審計,不指定結構或物件。比如audit table 會審計資料庫中所有的create table,drop table,truncate table語句,alter session by cmy會審計cmy使用者所有的資料庫連線。
3.2
許可權審計,當使用者使用了該許可權則被審計,如執行grant select any table to a,當執行了audit select any table語句後,當使用者a 訪問了使用者b的表時(如select * from b.t)會用到select any table許可權,故會被審計。注意使用者是自己表的所有者,所以使用者訪問自己的表不會被審計。 特權審計。
3.3
物件審計,對一特殊模式物件上的指定語句的審計. 如審計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
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
audit_trail 引數的值可以設定為以下幾種
1. NONE:不開啟
2. DB:開啟審計功能
3. OS:審計記錄寫入一個作業系統檔案。
4. TRUE:與引數DB一樣
5. FALSE:不開啟審計功能。
這個引數是寫道spfile裡面的,需要重啟資料庫
8.2
SQL> show parameter audit
NAME
------------------------------------ ----------- ------------------------------
audit_file_dest
audit_sys_operations
audit_syslog_level
audit_trail
8.3 開啟審計
SQL> conn /as sysdba
SQL> show parameter audit
NAME
------------------------------------ ----------- ------------------------------
audit_file_dest
audit_sys_operations
audit_syslog_level
audit_trail
SQL> alter system set audit_sys_operations=TRUE scope=spfile;
SQL> alter system set audit_trail=db,extended scope=spfile;
開啟審計要重啟例項
SQL> show parameter audit
NAME
------------------------------------ ----------- ------------------------------
audit_file_dest
audit_sys_operations
audit_syslog_level
audit_trail
8.4
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
------------------------------------
audit_file_dest
audit_sys_operations
audit_trail
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
------------------------------------
audit_file_dest
audit_sys_operations
audit_trail
9.2 開始審計
注意:無法對 SYS 使用者操作執行 audit 或 noaudit 命令
SQL> conn
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
-------
user
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;
10.FGA策略(細粒度審計)
DBMS_FGA是SYS使用者的一個包
10.1 增加 FGA 策略-- 審計表
GRANT RESOURCE,CONNECT TO BANK IDENTIFIED BY BANK;
CREATE TABLE BANK.ACCOUNTS
(
);
insert into bank.accounts values(1,1,10000);
insert into bank.accounts values(2,2,20000);
commit;
Begin
dbms_fga.drop_policy (
dbms_fga.add_policy (
end;
/
select * from bank.accounts;
select timestamp, db_user,os_user,object_schema,object_name,sql_text
-- 審計列和審計條件, 在add_policy中加入
--
--
Begin
dbms_fga.drop_policy (
dbms_fga.add_policy (
end;
/
select BALANCE from bank.accounts;
select timestamp, db_user,os_user,object_schema,object_name,sql_text
10.2 管理 FGA 策略
--要刪除策略,您可以使用以下語句:
begin
dbms_fga.drop_policy (
object_schema => 'BANK',
object_name => 'ACCOUNTS',
policy_name => 'ACCOUNTS_ACCESS'
end;
/
-- 對於更改策略而言,沒有隨取隨用的解決方案。要更改策略中的任何引數,必須刪除策略,再使用更改後的引數新增策略。
-- 需要臨時禁用審計收集 — 例如,如果您希望將線索表移動到不同的表空間或者要刪除線索表。您可以按如下方法禁用 FGA 策略:
begin
dbms_fga.enable_policy (
object_schema => 'BANK',
object_name => 'ACCOUNTS',
policy_name => 'ACCOUNTS_ACCESS',
enable => FALSE
end;
/
-- 重新啟用很簡單 enable =>; TRUE
--演示何時審計操作以及何時不審計操作的各種情況 SQL 語句 審計狀態
select balance from bank.accounts;
select * from
select cust_id from bank.accounts where balance < 10000; 進行審計。即使使用者沒有明確指定列 BALANCE,where 子句也隱含地選擇了它。
select cust_id from bank.accounts;
select count(*) from bank.accounts;
10.3
-- FGA 的功能不只是記錄審計線索中的事件;FGA 還可以任意執行過程。
-- 過程可以執行一項操作,比如當使用者從表中選擇特定行時向審計者傳送電子郵件警告,或者可以寫到不同的審計線索中。
-- 這種儲存程式碼段可以是獨立的過程或者是程式包中的過程,稱為策略的處理器模組。
-- 實際上由於安全性原因,它不必與基表本身處於同一模式中,您可能希望特意將它放置在不同的模式中。
-- 由於只要 SELECT 出現時過程就會執行,非常類似於 DML 語句啟動的觸發器,您還可以將其看作 SELECT 語句觸發器。
-- 以下引數指定將一個處理器模組指定給策略:
--
--
-- 處理器模組還可以採用程式包的名稱來代替過程名稱。在這種情況下,引數 handler_module 在 package.procedure 的格式中指定。
10.4
-- 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
10.5.1 如果您只希望審計對檢視的查詢而不是對錶的查詢,可以對檢視本身建立策略。
-- 透過將檢視名稱而不是表的名稱傳遞給打包的過程 dbms_fga.add_policy 中的引數 object_name,可以完成這項工作。
-- 隨後 DBA_FGA_AUDIT_TRAIL 中的 OBJECT_NAME 列將顯示檢視的名稱,並且不會出現有關表訪問的附加記錄。
10.6 其它用途
--
--
--
--
結論
資料字典檢視 DBA_AUDIT_POLICIES 中重要的列
-----------------------------------------------------------------------
OBJECT_SCHEMA
OBJECT_NAME
POLICY_NAME
POLICY_TEXT
POLICY_COLUMN
ENABLED
PF_SCHEMA
PF_PACKAGE
PF_FUNCTION
資料字典檢視 DBA_FGA_AUDIT_TRAIL 中重要的列
-----------------------------------------------------------------------
SESSION_ID
TIMESTAMP
DB_USER
OS_USER
USERHOST
CLIENT_ID
EXT_NAME
OBJECT_SCHEMA
OBJECT_NAME
POLICY_NAME
SCN
SQL_TEXT
SQL_BIND
結論:
1.
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 審計。
例項:
3、對於 drop table 語句的稽核只能是 audit table;
如果僅僅是對 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle10g 審計功能Oracle
- 轉載:Oracle10g新特性——審計Oracle
- oracle10g審計(轉)Oracle
- 快速實現oracle10g的審計功能Oracle
- Oracle10g審計Oracle
- Oracle 審計功能Oracle
- oracle審計功能Oracle
- ORACLE的 審計功能Oracle
- Oracle FGA審計功能Oracle
- Oracle審計(轉)Oracle
- 關於oracle審計功能Oracle
- Oracle Database標準審計和細粒度審計功能OracleDatabase
- Oracle audit 審計功能說明Oracle
- 初識ORACLE的審計功能Oracle
- 開啟Oracle的審計功能Oracle
- oracle審計-細粒度(轉)Oracle
- oracle 11g 系統審計功能Oracle
- Oracle資料庫審計功能介紹Oracle資料庫
- oracle 11g 關閉審計功能Oracle
- MySQL審計功能MySql
- Oracle10G審計失敗的使用者登陸Oracle
- Oracle Audit 審計功能的認識與使用Oracle
- 關於oracle11g的審計功能Oracle
- 關閉及開啟oracle10g統計資訊自動收集功能(轉)Oracle
- oracle9i審計功能的開啟和審計策略的設定方法Oracle
- Oracle審計Oracle
- oracle 審計Oracle
- 在linux上安裝oracle10g(轉載)LinuxOracle
- ORACLE SYSTEM表空間異常與審計的功能Oracle
- mysql啟用審計功能MySql
- LINUX AS 5 審計功能Linux
- 開啟oracle10g統計資訊自動收集功能Oracle
- Oracle10g新功能介紹Oracle
- 【實驗】【審計】【FGA】使用Oracle的審計功能監控資料庫中的可疑操作Oracle資料庫
- Oracle:審計清理Oracle
- Oracle審計列表Oracle
- Oracle 審計 auditOracle
- Oracle審計例子Oracle