暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 审核不是由特定机器创建的会话中的所有操作

ASKTOM 2020-07-29
190

问题描述

嗨,汤姆

感谢以前的解决方案。

请指导我或分享一些有用的链接,以实现以下要求。

1-> 我们要审核不是由应用程序创建的会话的所有操作。
2-> 具有1000记录的游标将在审核中生成1000行。

注意 * 我们有12c R2 SE Oracle数据库。所以没有细粒度的审计。
我只需要存储信息 (操作,object_name,schema_name,主机,OS_user,ip地址,时间,日期)。
“所有操作” 包括所有内容 (更改,创建,删除,更新,删除等),例如 “成功时按模式审核”。


实际场景:: 应用程序用户被许多开发人员使用,我们只想审核开发人员会话的操作,而不是应用程序。

我们如何才能在对性能影响最小的情况下实现它。

专家解答

1.您可以使用统一审计。

创建一个策略,该策略指定用于确定审核内容的标准。您可以在此处访问sys_context变量,因此您可以将其基于用户名,IP,主机,...

这将审核用户U所做的一切:

grant create session, create table, unlimited tablespace to u
  identified by u;

create audit policy test_audit_policy
  actions all
  when    q'!sys_context('userenv', 'session_user') = 'U'!'
  evaluate per session
  container = current;
  
audit policy test_audit_policy;


请记住,有可能欺骗许多 (全部?) 您可以用来检查语句是否来自应用程序的属性。因此,坚定的开发人员可以找到一种方法来假装成为绕过您的审核的应用程序。审计一切都要容易和安全得多。

2.你会得到每个SQL语句的行如果您一次选择1000行,您将有一个条目。

conn u/u

create table t (
  c1 int
);
insert into t 
with rws as (
  select level x from dual
  connect by level <= 100
)
  select * from rws;
commit;

select count (*) from t;

var cur refcursor;

exec open :cur for select * from t;

print :cur

conn chris

select action_name, sql_text
from   unified_audit_trail
where  dbusername = 'U'
and    event_timestamp > systimestamp - interval '1' minute 
and    action_name <> 'EXECUTE'
order by event_timestamp;

ACTION_NAME          SQL_TEXT
-------------------- ------------------------------------------------------------
LOGOFF               
LOGON                
ALTER SESSION        ALTER SESSION SET TIME_ZONE='Europe/London' NLS_LANGUAGE='AM
                     ERICAN' NLS_TERRITOR

SELECT               select * from v$version where banner like '%Oracle%'
SELECT               select parameter,value from nls_session_parameters
                      union all SELECT 'DB_TIMEZO

ALTER SESSION        ALTER SESSION SET TIME_ZONE = 'Europe/London'
COMMIT               ALTER SESSION SET TIME_ZONE = 'Europe/London'
SELECT               SELECT DBTIMEZONE FROM DUAL
SELECT               select parameter,value from nls_session_parameters
                      union all SELECT 'DB_TIMEZO

SELECT               select sys_context('userenv','service_name') from dual
SELECT               select USER from dual
CREATE TABLE         create table t (
                       c1 int
                     )

INSERT               insert into t
                     with rws as (
                       select level x from dual
                       connect by level <= 10

COMMIT               commit
COMMIT               commit
SELECT               select count (*) from t
SELECT               SELECT * FROM T
COMMIT               
LOGOFF               

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论