在 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 数据库方法吗?
预先感谢您的帮助!
您可以启用 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)
您还可以为此创建一个数据库触发器:
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
请注意,我们无法在 SYS 对象上创建细粒度的审核策略。
谢谢。