<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    幸せのちから

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

    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 閱讀(801) 評論(0)  編輯  收藏


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


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

    導航

    隨筆分類(125)

    文章分類(5)

    日本語

    搜索

    積分與排名

    最新隨筆

    最新評論

    主站蜘蛛池模板: 亚洲天堂中文字幕在线| 亚洲精品成a人在线观看| 国产精一品亚洲二区在线播放| 九九精品免费视频| 伊人久久亚洲综合影院 | 国产亚洲大尺度无码无码专线| 久久久久亚洲AV无码去区首| 97在线视频免费公开视频| 久久精品国产亚洲精品| 亚洲一级特黄特黄的大片| 日韩免费码中文在线观看| 黄色短视频免费看| 30岁的女人韩剧免费观看| 亚洲毛片一级带毛片基地| 97热久久免费频精品99| 亚洲中文无码卡通动漫野外| 狠狠久久永久免费观看| 久久久久亚洲AV成人无码网站 | 亚洲啪啪免费视频| 亚洲成人中文字幕| 国产国产人免费视频成69堂| 亚洲人成色在线观看| 亚洲毛片不卡av在线播放一区| 国产免费一区二区三区不卡| 亚洲日韩国产成网在线观看| 大地资源网高清在线观看免费| 久久亚洲精品国产精品| 午夜小视频免费观看| jzzjzz免费观看大片免费| 国产大片线上免费看| 久久国产乱子伦精品免费午夜| 亚洲国产精品自在在线观看 | 国产成人福利免费视频| 亚洲av无码日韩av无码网站冲| 亚洲精品无码日韩国产不卡?V| 你懂的免费在线观看网站| 亚洲国产免费综合| 亚洲AV香蕉一区区二区三区| 亚洲欧洲中文日韩久久AV乱码| 亚洲视频在线免费观看| 久久综合亚洲色hezyo|