在XP SP2虚拟机中运行Oracle11gR1。完全公开:这是一项任务。
我尝试在用户被授予DBA角色时进行审计,并在事件发生时发出一封电子邮件。
我相信AUDIT 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角色时,也可以触发电子邮件通知?
提前感谢您的帮助!
发布于 2013-01-04 20:51:50
您可以启用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)发布于 2013-01-04 22:04:00
您还可以为此创建一个数据库触发器:
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的改编
https://stackoverflow.com/questions/13636272
复制相似问题