几天前我创建了一个存储过程。但是有人删除了我做的所有修改。是否可以跟踪对存储过程执行ddl更改的OSUSER。
但无法获得OSUSER。sql开发者托管在citrix中。所以登录的用户名对每个人都是一样的。但是OSUSER将是唯一的。
jc3wubiy1#
坦率地说,这种颗粒状的细节是非常非常困难的。您可以从dba_objects获取lastddl时间。我想知道为何需要这样详细的资料?
368yc8dk2#
我想最好的办法是检查DBA_AUDIT_TRAIL。在Oracle AUDIT documentation中,您可以在最后一个示例中看到如果
AUDIT ALTER, GRANT, INSERT, UPDATE, DELETE ON DEFAULT;
被执行,则此应适用如果创建过程、包或函数,Oracle数据库将自动审核针对它发出的任何ALTER或GRANT语句。所以如果使用了ALTER PROCEDURE,我想它应该在那里。我不确定CREATE OR REPLACE是否以这种方式进行审计。
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;
3条答案
按热度按时间jc3wubiy1#
坦率地说,这种颗粒状的细节是非常非常困难的。您可以从dba_objects获取lastddl时间。我想知道为何需要这样详细的资料?
368yc8dk2#
我想最好的办法是检查DBA_AUDIT_TRAIL。在Oracle AUDIT documentation中,您可以在最后一个示例中看到如果
被执行,则此应适用
如果创建过程、包或函数,Oracle数据库将自动审核针对它发出的任何ALTER或GRANT语句。
所以如果使用了ALTER PROCEDURE,我想它应该在那里。我不确定CREATE OR REPLACE是否以这种方式进行审计。
14ifxucb3#
您还可以创建触发器来审核架构上的ddl,例如: