Oracle 审计授予 dba 角色

问题描述 投票:0回答:3

在 XP SP2 虚拟机中运行 Oracle 11gR1。 全面披露:这是一项作业。

我尝试在用户被授予 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 的文档我没有找到解决这个问题的方法。

我的问题是:任何人都可以建议一种当用户获得 DBA 角色时还可以触发电子邮件通知的审计和 Oracle 数据库方法吗?

预先感谢您的帮助!

oracle database-administration auditing
3个回答
4
投票

您可以启用 AUDIT_TRAIL 并创建一个作业,定期查询 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
投票

请注意,我们无法在 SYS 对象上创建细粒度的审核策略。

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.