当前位置:文档之家› 通过oracle 监听器日志 分析数据库服务器是否安全

通过oracle 监听器日志 分析数据库服务器是否安全

通过oracle 监听器日志 分析数据库服务器是否安全

----------------通过oracle 监听器日志 分析挖掘 连接数据库服务器的IP

by liangwg 2012-01-06

数据库的审计很重要,如果每次登录都实时记录用户行为,会对系统性能造成很大的影响,但如果不做记录分析,又担心数据库的安全:
有没有潜在的危险者,每天登录你的数据库系统?

有没有陌生的IP访问你的数据库系统?

哪些IP ,哪些应用服务器在频繁地访问数据库?

这些你知道吗?


下面的部署和实施能解决你这个问题

第一步:建外部表,通过抓取监听器日志来形成报表数据:

----------------------------监控 连接DB IP 的明细表--------------------------------
DROP TABLE ADMIN.LSN_LOG CASCADE CONSTRAINTS;

CREATE TABLE ADMIN.LSN_LOG
(
TEXT VARCHAR2(4000 BYTE)
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY LSN_LOG
ACCESS PARAMETERS
( records delimited by newline
nobadfile
nodiscardfile
nologfile
)
LOCATION (LSN_LOG:'listener_m4000-3.log')
)
REJECT LIMIT UNLIMITED
NOPARALLEL
NOMONITORING;
----------------------------统计表:ip , 连接DB 的次数 -------------------------
CREATE TABLE ADMIN.RPT_LSN_LOG
(
INDATE VARCHAR2(10 BYTE),
IP VARCHAR2(4000 BYTE),
TOTAL NUMBER
)


第二步: SQL编写

-------插入SQL----------------

prompt #--- 监听器统计: 每个连接数据库的IP、及次数统计:
delete from lsn_log_detail_tmp nologging;
insert into lsn_log_detail_tmp
select substr(text,1,20) as create_time,
substr(text,instr(text,'(ADDRESS=(PROTOCOL=tcp)(HOST=')+29,instr(text,')(PORT=')-instr(text,'(ADDRESS=(PROTOCOL=tcp)(HOST=')-29) as IP
from lsn_log where length(text)>=52;
delete from rpt_lsn_log where indate=to_char(sysdate,'yyyy-mm-dd');
insert into rpt_lsn_log
select to_char(sysdate,'yyyy-mm-dd') as indate ,ip,count(*) as total from lsn_log_detail_tmp group by ip order by count(*) desc ;
commit;


第三步 SQL 部署和定时运行
------建立 procedure------------------------
CREATE OR REPLACE PROCEDURE ADMIN.PRO_MONTOR_IP
AS
BEGIN
delete from lsn_log_detail_tmp ;
commit;
insert into lsn_log_detail_tmp
select substr(text,1,20) as create_time,
substr(text,instr(text,'(ADDRESS=(PROTOCOL=tcp)(HOST=')+29,instr(text,')(PORT=')-instr(text,'(ADDRESS=(PROTOCOL=tcp)(HOST=')-29) as IP
from lsn_log where length(text)>=52;
commit;
delete from rpt_lsn_log where indate=to_char(sysdate,'yyyy-mm-dd');
commit;
insert into rpt_lsn_log
select to_char(sysdate,'yyyy-mm-dd') as indate ,ip,count(*) as total from lsn_log_detail_tmp group by ip ;
commit;
END PRO_MONTOR_IP;
/



------------建立 Job 每晚 23:00 跑---------------------------
BEGIN
SYS.DBMS_JOB.REMOVE(94);
C

OMMIT;
END;
/

DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'ADMIN.PRO_MONTOR_IP;'
,next_date => to_date('07-01-2012 23:00:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'TRUNC(SYSDATE+1)+23/24'
,no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
/

---------------------------------------------------




相关主题
文本预览
相关文档 最新文档