请教在oracle中如何得到客户提交的事务的信息? 请高手指点在oracle中如何得到客户提交的事务的信息?(包括事务的标识,提交的用户,事务的语句及参数等) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以尝试使用LogMiner工具。做法是运行 dbms_logmnr.start_logmnr()过程之后,再从 v$logmnr_contents系统视图里查询相关信息(不仅是关于TRANSACTION的,里面的信息相当丰富)。具体做法可以参看ORACLE 文档。 本人想做关于数据库的入侵检测系统,需要检测出恶意的事务,所以考虑从oracle中获取事务信息。楼上zexunlee的方法是事务提交以后才能获得事务的信息,是否存在在事务提交之前获得事务信息的方法。 創建如下的兩張表:create table login_log -- 登入登出信息表( session_id int not null, -- sessionid login_on_time date, -- 登入時間 login_off_time date, -- 登出時間 user_in_db varchar2(30), -- 登入的db user machine varchar2(20), -- 機器名 ip_address varchar2(20), -- ip地址 run_program varchar2(20) -- 以何程序登入);create table allow_user -- 網域用戶表( ip_address varchar2(20), -- ip地址 login_user_name nvarchar2(20) -- 操作者姓名);創建如下的兩個觸發器:create or replace trigger login_on_info -- 紀錄登入信息的觸發器after logon on database Begin insert into login_log(session_id,login_on_time,login_off_time,user_in_db,machine,ip_address,run_program) select AUDSID,sysdate,null,sys.login_user,machine,SYS_CONTEXT('USERENV','IP_ADDRESS'),program from v$session where AUDSID = USERENV('SESSIONID'); --當前SESSIONEND;create or replace trigger login_off_info -- 紀錄登出信息的觸發器before logoff on database Begin update login_log set login_off_time = sysdate where session_id = USERENV('SESSIONID'); --當前SESSION exception when others then null;END;方法二:用如下的方式可以審計執行drop動作的事件:/** * drop語句的審計日誌表 */create table drop_log( session_id int not null, -- sessionid drop_time date, -- drop的時間 ip_address varchar2(20), -- ip地址 object_owner varchar2(30), -- 對象的擁有者 object_name varchar2(30), -- 對象名稱 object_type varchar2(20), -- 對象類型 drop_by_user varchar2(30) -- 執行drop語句的用戶);create or replace trigger drop_info after drop on mfg0513user.schema -- 在mfg0513user用戶上創建審計drop的觸發器begin insert into drop_log (session_id, drop_time, ip_address, object_owner, object_name, object_type, drop_by_user) values(USERENV('SESSIONID'), sysdate, SYS_CONTEXT('USERENV','IP_ADDRESS'), sys.dictionary_obj_owner, sys.dictionary_obj_name, sys.dictionary_obj_type, sys.login_user); end; 请问楼上的 beckhambo和boxzou如何截取事务中的SQL语句和参数呢? 找出pp2表中num重复的记录 oracle 列出所有的表 个人安装Oracle 10g硬件配置多少才比较可以? 请问oracle中的sid怎么改呢? 请问用proc远程访问oracle,需要安装oracle客户端吗? 不知道这个算不算有难度,请大家帮忙 求救!! 如何将查询数据库中的结果输出到文本? 请教嵌入sql的具体实现 C++ builder 中用OCI方法连接ORACLE数据库的问题! 用JAVA程序如何读写带有中文的CLOB字段?
获取事务信息。楼上zexunlee的方法是事务提交以后才能获得事务的信息,是否存在在事务提交之前获得事务信息的方法。
create table login_log -- 登入登出信息表
(
session_id int not null, -- sessionid
login_on_time date, -- 登入時間
login_off_time date, -- 登出時間
user_in_db varchar2(30), -- 登入的db user
machine varchar2(20), -- 機器名
ip_address varchar2(20), -- ip地址
run_program varchar2(20) -- 以何程序登入
);create table allow_user -- 網域用戶表
(
ip_address varchar2(20), -- ip地址
login_user_name nvarchar2(20) -- 操作者姓名
);創建如下的兩個觸發器:
create or replace trigger login_on_info -- 紀錄登入信息的觸發器
after logon on database
Begin
insert into login_log(session_id,login_on_time,login_off_time,user_in_db,machine,ip_address,run_program)
select AUDSID,sysdate,null,sys.login_user,machine,SYS_CONTEXT('USERENV','IP_ADDRESS'),program
from v$session where AUDSID = USERENV('SESSIONID'); --當前SESSION
END;create or replace trigger login_off_info -- 紀錄登出信息的觸發器
before logoff on database
Begin
update login_log set login_off_time = sysdate
where session_id = USERENV('SESSIONID'); --當前SESSION
exception
when others then
null;
END;方法二:
用如下的方式可以審計執行drop動作的事件:
/**
* drop語句的審計日誌表
*/
create table drop_log
(
session_id int not null, -- sessionid
drop_time date, -- drop的時間
ip_address varchar2(20), -- ip地址
object_owner varchar2(30), -- 對象的擁有者
object_name varchar2(30), -- 對象名稱
object_type varchar2(20), -- 對象類型
drop_by_user varchar2(30) -- 執行drop語句的用戶
);create or replace trigger drop_info
after drop on mfg0513user.schema -- 在mfg0513user用戶上創建審計drop的觸發器
begin
insert into drop_log
(session_id,
drop_time,
ip_address,
object_owner,
object_name,
object_type,
drop_by_user)
values(USERENV('SESSIONID'),
sysdate,
SYS_CONTEXT('USERENV','IP_ADDRESS'),
sys.dictionary_obj_owner,
sys.dictionary_obj_name,
sys.dictionary_obj_type,
sys.login_user);
end;