2012-11-29 87 views
4

在XP SP2虛擬機中運行Oracle 11gR1。充分披露:這是一項任務。Oracle審計授權dba角色

我試圖在用戶被授予DBA角色時進行審計,並在事件發生時觸發電子郵件。

我相信命令AUDIT DBA;將審覈對DBA角色執行的所有操作。我有一個完整的工作程序來處理電子郵件部分,但我不知道標準審計的方式是以一種細粒度的審計策略可以觸發程序。

我已經使用策略

begin 
dbms_fga.drop_policy 
    (object_schema => 'SYS', 
    object_name => 'DBA_ROLE_PRIVS', 
    policy_name => 'EXAMPLE'); 
dbms_fga.add_policy 
    (object_schema => 'SYS', 
    object_name => 'DBA_ROLE_PRIVS', 
    policy_name => 'EXAMPLE', 
    audit_condition => 'GRANTED_ROLE = DBA', 
    audit_column => 'GRANTED_ROLE', 
    handler_schema => 'SYS', 
    handler_module => 'FGA_NOTIFY'); 
end; 

哪裏FGA_NOTIFY是電子郵件程序審理。但是我收到通知「不允許向SYS擁有的對象添加策略。」通過Oracle文檔搜索,我發現沒有辦法解決這個問題。

我的問題是:任何人都可以提出一種審計和Oracle數據庫的方法,當用戶獲得DBA角色,也可以觸發電子郵件通知?

在此先感謝您的幫助!

回答

4

您可以啓用AUDIT_TRAIL並創建定期querys尋找資助種類要檢查DBA_AUDIT_TRAIL查看作業:

select os_username, username, userhost, terminal, timestamp, grantee 
    from dba_audit_trail 
    where action_name = 'GRANT ROLE' 
    and obj_name = 'DBA' 
    and timestamp >= (last_time_check_was_done) 
1

你也可以創建一個數據庫觸發器:

CREATE OR REPLACE TRIGGER TG_GRANTS_DATABASE 
    BEFORE GRANT ON DATABASE 
DECLARE 
    V_NUM_GRANTEES BINARY_INTEGER; 
    V_GRANTEE_LIST ORA_NAME_LIST_T; 
    V_NUM_PRIVS  BINARY_INTEGER; 
    V_PRIV_LIST  ORA_NAME_LIST_T; 

    VB_AUDIT_PRIV BOOLEAN; 
    VB_AUDIT_GRANTEE BOOLEAN; 
BEGIN 
    V_NUM_GRANTEES := ORA_GRANTEE (V_GRANTEE_LIST); 
    V_NUM_PRIVS := ORA_PRIVILEGE_LIST (V_PRIV_LIST); 

    -- Verify the privilege 
    VB_AUDIT_PRIV := FALSE; 
    FOR COUNTER IN 1 .. V_NUM_PRIVS 
    LOOP 
     IF V_PRIV_LIST (COUNTER) IN ('DBA') THEN 
      VB_AUDIT_PRIV := TRUE; 
      EXIT; 
     END IF; 
    END LOOP; 

    -- Verify the user 
    VB_AUDIT_GRANTEE := FALSE; 
    FOR COUNTER IN 1 .. V_NUM_GRANTEES 
    LOOP 
     IF V_GRANTEE_LIST (COUNTER) IN ('PUBLIC') THEN 
      VB_AUDIT_GRANTEE := TRUE; 
      EXIT; 
     END IF; 
    END LOOP; 

    -- Prevent the statement 
    -- or audit it (BEST DONE on 'AFTER GRANT ON DATABASE trigger') 
    IF VB_AUDIT_GRANTEE AND VB_AUDIT_PRIV THEN 
     RAISE_APPLICATION_ERROR(-20001,'Sorry, this can''t be done.'); 
    END IF; 
END; 

這是一個適應基於:http://examples.oreilly.com/oraclep3/individual_files/what_privs.sql

+0

感謝您的答覆和鏈接。觸發器是我嘗試做的完美解決方案。 – HawatT