可以审计oracle的工具,Oracle 审计功能 Audit使用教程(2)
已連接。
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string D:\ORACLE\ADMIN\DBA\ADUMP
audit_sys_operations boolean FALSE
audit_trail string 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 TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string D:\ORACLE\ADMIN\DBA\ADUMP
audit_sys_operations boolean TRUE
audit_trail string DB, EXTENDED
9.2 開始審計
注意:無法對 SYS 用戶操作執行 audit 或 noaudit 命令
SQL> conn 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 TERMINAL TIMESTAMP OWNER
------- -------- --------------- --------------- -------------- ----------------
user SYSTEM WORKGROUP\HFCC- HFCC-KF-3068 22-10月-09 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;
10.FGA策略(細粒度審計)
DBMS_FGA是SYS用戶的一個包
10.1 增加 FGA 策略
-- 審計表
GRANT RESOURCE,CONNECT TO BANK IDENTIFIED BY BANK;
CREATE TABLE BANK.ACCOUNTS
(
ACCT_NO NUMBER PRIMARY KEY,
CUST_ID NUMBER NOT NULL ,
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 (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
policy_name=>'ACCOUNTS_ACCESS');
dbms_fga.add_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
policy_name=>'ACCOUNTS_ACCESS');
end;
/
select * from bank.accounts;
select timestamp, db_user,os_user,object_schema,object_name,sql_text from dba_fga_audit_trail;
-- 審計列和審計條件, 在add_policy中加入
-- audit_column => 'BALANCE'
-- audit_condition => 'BALANCE >= 11000'
Begin
dbms_fga.drop_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
policy_name=>'ACCOUNTS_ACCESS');
dbms_fga.add_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
audit_column => 'BALANCE',
audit_condition => 'BALANCE >= 11000',
policy_name=>'ACCOUNTS_ACCESS');
end;
/
select BALANCE from bank.accounts;
select timestamp, db_user,os_user,object_schema,object_name,sql_text from dba_fga_audit_trail;
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; 進行審計。用戶選擇了在添加策略時所指定的審計列 BALANCE。
select * from bank.accounts; 進行審計。即使用戶沒有明確指定列 BALANCE,* 也隱含地選擇了它。
select cust_id from bank.accounts where balance < 10000; 進行審計。即使用戶沒有明確指定列 BALANCE,where 子句也隱含地選擇了它。
select cust_id from bank.accounts; 不進行審計。用戶沒有選擇列 BALANCE。
select count(*) from bank.accounts; 不進行審計。用戶沒有明確或隱含地選擇列 BALANCE。
10.3 處理器模塊
-- FGA 的功能不只是記錄審計線索中的事件;FGA 還可以任意執行過程。
-- 過程可以執行一項操作,比如當用戶從表中選擇特定行時向審計者發送電子郵件警告,或者可以寫到不同的審計線索中。
-- 這種存儲代碼段可以是獨立的過程或者是程序包中的過程,稱為策略的處理器模塊。
-- 實際上由于安全性原因,它不必與基表本身處于同一模式中,您可能希望特意將它放置在不同的模式中。
-- 由于只要 SELECT 出現時過程就會執行,非常類似于 DML 語句啟動的觸發器,您還可以將其看作 SELECT 語句觸發器。
-- 以下參數指定將一個處理器模塊指定給策略:
-- handler_schema 擁有數據過程的模式
-- handler_module 過程名稱
-- 處理器模塊還可以采用程序包的名稱來代替過程名稱。在這種情況下,參數 handler_module 在 package.procedure 的格式中指定。
10.4 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 from dba_fga_audit_trail;
10.5.1 如果您只希望審計對視圖的查詢而不是對表的查詢,可以對視圖本身建立策略。
-- 通過將視圖名稱而不是表的名稱傳遞給打包的過程 dbms_fga.add_policy 中的參數 object_name,可以完成這項工作。
-- 隨后 DBA_FGA_AUDIT_TRAIL 中的 OBJECT_NAME 列將顯示視圖的名稱,并且不會出現有關表訪問的附加記錄。
10.6 其它用途
除了記錄對表的選擇訪問,FGA 還可用于某些其它情況:
-- 您可以對數據倉庫使用 FGA,以捕獲特定的表、視圖或物化視圖上發生的所有語句,這有助于計劃索引。您不需要到 V$SQL 視圖去獲取這些信息。即使 SQL 語句已經超出了 V$SQL 的期限,在 FGA 審計線索中將會始終提供它。
-- 由于 FGA 捕獲綁定變量,它可以幫助您了解綁定變量值的模式,這有助于設計直方圖集合等。
-- 處理器模塊可以向審計者或 DBA 發送警告,這有助于跟蹤惡意應用程序。
-- 由于 FGA 可以作為 SELECT 語句的觸發器,您可以在需要這種功能的任何時候使用它。
結論
FGA 在 Oracle 數據庫中支持隱私和職能策略。因為審計發生在數據庫內部而不是應用程序中,所以無論用戶使用的訪問方法是什么(通過諸如 SQL*Plus 等工具或者應用程序),都對操作進行審計,允許進行非常簡單的設置。
數據字典視圖 DBA_AUDIT_POLICIES 中重要的列
-----------------------------------------------------------------------
OBJECT_SCHEMA 對其定義了 FGA 策略的表或視圖的所有者
OBJECT_NAME 表或視圖的名稱
POLICY_NAME 策略的名稱 — 例如,ACCOUNTS_ACCESS
POLICY_TEXT 在添加策略時指定的審計條件 — 例如,BALANCE >;= 11000
POLICY_COLUMN 審計列 — 例如,BALANCE
ENABLED 如果啟用則為 YES,否則為 NO
PF_SCHEMA 擁有策略處理器模塊的模式(如果存在)
總結
以上是生活随笔為你收集整理的可以审计oracle的工具,Oracle 审计功能 Audit使用教程(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS磨砂效果
- 下一篇: android端口数据包,【图片】and