幸せのちから

          平凡的世界
          看似平常實崎嶇
          成如容易卻艱辛

          oracle審計(轉)

          oracle審計(轉)

             轉自http://blog.163.com/ameizhu111@126/blog/static/365271882009041481299/

          1、什么是審計

          審計(Audit)用于監視用戶所執行的數據庫操作,并且Oracle會將審計跟蹤結果存放 到OS文件(默認位置為$ORACLE_BASE/admin/$ORACLE_SID/adump/)或數據庫(存儲在system表空間中的 SYS.AUD$表中,可通過視圖dba_audit_trail查看)中。默認情況下審計是沒有開啟的。

          不管你是否打開數據庫的審計功能,以下這些操作系統會強制記錄:用管理員權限連接Instance;啟動數據庫;關閉數據庫。

          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(對象)。

          Statement:

          按語句來審計,比如audit table 會審計數據庫中所有的create table,drop table,truncate table語句,alter session by cmy會審計cmy用戶所有的數據庫連接。

          Privilege:

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

          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、審計的一些其他選項

          by access / by session:

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

          by session 一個會話里面同類型的操作只會生成一條audit trail,默認為by session。

          whenever [not] successful:

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

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

          5、和審計相關的視圖

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

          dba_stmt_audit_opts:可以用來查看statement審計級別的audit options,即數據庫設置過哪些statement級別的審計。dba_obj_audit_opts,dba_priv_audit_opts視圖功能與之類似

          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、激活審計

          SQL> conn /as sysdba

          SQL> show parameter audit

          NAME TYPE VALUE

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

          audit_file_dest string /u01/app/oracle/admin/ORCL/adump

          audit_sys_operations boolean FALSE

          audit_syslog_level string

          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 /u01/app/oracle/admin/ORCL/adump

          audit_sys_operations boolean TRUE

          audit_syslog_level string

          audit_trail string DB, EXTENDED

          8.2、開始審計

          SQL> conn /as sysdba

          SQL> audit all on t_test;

          SQL> conn u_test

          SQL> select * from t_test;

          SQL> insert into u_test.t_test (c2,c5) values ('test1','2');

          SQL> commit;

          SQL> delete from u_test.t_test;

          SQL> commit;

          SQL> conn /as sysdba

          SQL> col DEST_NAME format a30

          col OS_USERNAME format a15

          col USERNAME format a15

          col USERHOST format a15

          col TERMINAL format a15

          col OBJ_NAME format a30

          col SQL_TEXT format a60

          SQL> select OS_USERNAME,username,USERHOST,TERMINAL,TIMESTAMP,OWNER,obj_name,ACTION_NAME,sessionid,os_process,sql_text from dba_audit_trail;

          sql> audit select table by u_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 test; --審計test用戶對表user.table的delete,update,insert操作

          8.3、撤銷審計

          SQL> noaudit all on t_test;

          9、精細審計

          9.1、創建審計標記

          SQL> exec dbms_fga.add_policy(object_schema=>'ryan',object_name=>'test',policy_name=>'chk_test',statement_types=>'select');

          9.2、開啟審計

          SQL> exec DBMS_FGA.ENABLE_POLICY(object_schema=>'ryan' ,object_name=>'test' ,policy_name=>'chk_test');

          9.3、查看審計記錄

          SQL> conn system/811226@ryan123

          Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

          Connected as system

          SQL> SELECT session_id,TIMESTAMP,db_user,os_user,userhost,sql_text FROM Dba_Fga_Audit_Trail;

          SESSION_ID TIMESTAMP DB_USER OS_USER USERHOST SQL_TEXT

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

          201 2008-11-4 2 RYAN Ryan WORKGROUP\LENOVO-C30DA497 select * from test

          9.4、關閉審計

          SQL> exec DBMS_FGA.DISABLE_POLICY(object_schema=>'ryan' ,object_name=>'TEST' ,policy_name=>'chk_test');

          9.5、刪除審計標記

          SQL> exec DBMS_FGA.DROP_POLICY(object_schema=>'ryan' ,object_name=>'TEST' ,policy_name=>'chk_test');

          posted on 2009-03-25 10:08 Lucky 閱讀(803) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2009年3月>
          22232425262728
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          隨筆分類(125)

          文章分類(5)

          日本語

          搜索

          積分與排名

          最新隨筆

          最新評論

          主站蜘蛛池模板: 许昌市| 额敏县| 孟村| 石河子市| 土默特左旗| 江陵县| 全椒县| 沙河市| 从江县| 北川| 咸宁市| 连州市| 方山县| 固原市| 南安市| 凭祥市| 冷水江市| 陆良县| 长白| 东兰县| 禹城市| 东至县| 沧州市| 杂多县| 易门县| 东兰县| 桦甸市| 苗栗县| 泾阳县| 宁海县| 和田市| 安溪县| 增城市| 临夏市| 普陀区| 龙海市| 利辛县| 临沧市| 莎车县| 墨脱县| 科技|