Posted on 2006-02-14 12:26
柳随风 阅读(651)
评论(0) 编辑 收藏 所属分类:
oracle日常管理
实现方式比较简单:
创建用户登陆数据库的触发器,使用工具包记载客户端登陆的ip,使用logminer分析相关的归档文件以及联机重做日志,查找恶意删除数据的客户端信息。
条件: 以sys用户执行如下脚本
创建相关脚本:
create table login_log
(
SID NUMBER(16),
SERIAL NUMBER(16),
MACHINE VARCHAR2(64) ,
OSUSER VARCHAR2(30),
USERNAME VARCHAR2(30),
PROGRAM VARCHAR2(48),
LOGINTIME DATE
);
create or replace trigger logon_trigger
after logon on database
declare
LPRG VARCHAR2(48);
LUSERNAME varchar2(30);
LOSUSER varchar2(30);
LMACHINE varchar2(64);
LSID pls_integer;
LSERIAL pls_integer;
begin
--在会话信息中增加客户端ip地址
dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));
select sid,serial#,machine,osuser,program,username
into LSID,LSERIAL,LMACHINE,LOSUSER,LPRG,LUSERNAME from v$session
where sid=(select sid from v$mystat where rownum<2);
insert into login_log(sid,serial,machine,osuser,username,program,logintime)
values (LSID,LSERIAL,LMACHINE,LOSUSER,LUSERNAME,LPRG,sysdate);end;
分析相关日志时,通过v$logmnr_contents视图中session_info字段中的信息可以查找到相关信息。
类似如下的sql:
select session_info,sql_redo from v$logmnr_contents where sql_redo like '%drop%';