如何在Oracle中跟踪OSUSER?

5ktev3wc  于 2023-06-29  发布在  Oracle
关注(0)|答案(3)|浏览(168)

几天前我创建了一个存储过程。但是有人删除了我做的所有修改。是否可以跟踪对存储过程执行ddl更改的OSUSER

  • 使用DBA_Objects表,我发现已经执行了一些ddl更改。

但无法获得OSUSER。sql开发者托管在citrix中。所以登录的用户名对每个人都是一样的。但是OSUSER将是唯一的。

jc3wubiy

jc3wubiy1#

坦率地说,这种颗粒状的细节是非常非常困难的。您可以从dba_objects获取lastddl时间。我想知道为何需要这样详细的资料?

368yc8dk

368yc8dk2#

我想最好的办法是检查DBA_AUDIT_TRAIL。在Oracle AUDIT documentation中,您可以在最后一个示例中看到如果

AUDIT ALTER, GRANT, INSERT, UPDATE, DELETE
    ON DEFAULT;

被执行,则此应适用
如果创建过程、包或函数,Oracle数据库将自动审核针对它发出的任何ALTER或GRANT语句。
所以如果使用了ALTER PROCEDURE,我想它应该在那里。我不确定CREATE OR REPLACE是否以这种方式进行审计。

14ifxucb

14ifxucb3#

您还可以创建触发器来审核架构上的ddl,例如:

CREATE OR REPLACE TRIGGER SYS.{your_schema}_DDL_TRIGGER
before ddl on {your_schema}.schema
declare
   i number;
begin
   sys.dbms_system.ksdwrt(2, to_char(sysdate,'YYYY.MM.DD hh24:mi:ss') || ' Detected DDL on schema TBG from' ||
                         ' ip_address ' || sys_context('userenv', 'ip_address')||
                         ' Username ' || sys_context('USERENV','SESSION_USER')||
                         ' OSUser ' || sys_context('USERENV','OS_USER') ||
                         ' Module "' || sys_context('USERENV','MODULE') ||
                         '" ora_sysevent ' || ora_sysevent ||
                         ' ora_dict_obj_name ' || ora_dict_obj_name ||
                         ' ora_dict_obj_type ' || ora_dict_obj_type ||
                         ' ora_dict_obj_owner ' || ora_dict_obj_owner );
exception when others then
   null;
end {your_schema}_ddl_trigger;

相关问题