審記所有資料庫帳戶登入,記錄成功或失敗事件.

itpremier發表於2011-09-07

當你遇到不明身份的使用者非法嘗試登入而導致帳戶鎖定而影響正常的開發使用者或生產環境時,是否會因為找不到那個不法份子而感到抓狂和無耐,那就試試下面的方法吧。

create table tab_logon
(
USERID VARCHAR2(30),
WHO VARCHAR2(30),
PTS VARCHAR2(30),
SERVICE_USER VARCHAR2(30),
IP VARCHAR2(30),
LOGONDATE DATE,
SERVERERROR VARCHAR2(10)
);

CREATE or replace TRIGGER tri_logerror AFTER SERVERERROR ON DATABASE
BEGIN
IF (IS_SERVERERROR (1017)) THEN
INSERT INTO TAB_LOGON VALUES (SYS_CONTEXT('USERENV', 'SESSIONID'),SYS_CONTEXT(
'USERENV', 'SESSION_USER'),SYS_CONTEXT('USERENV', 'TERMINAL'),SYS_CONTEXT('USERE
NV', 'OS_USER'),SYS_CONTEXT('USERENV', 'IP_ADDRESS'),SYSDATE,'ORA-1017');
END IF;
END;
/

CREATE or replace TRIGGER TRI_LOGON AFTER LOGON ON DATABASE
BEGIN
INSERT INTO TAB_LOGON VALUES (SYS_CONTEXT('USERENV', 'SESSIONID'),SYS_CONTEXT(
'USERENV', 'SESSION_USER'),SYS_CONTEXT('USERENV', 'TERMINAL'),SYS_CONTEXT('USERE
NV', 'OS_USER'),SYS_CONTEXT('USERENV', 'IP_ADDRESS'),SYSDATE,'ORA-0000');
END;
/

如果想記錄客戶端使用的程式名,可以使用以下查詢:

select
SYS_CONTEXT('USERENV', 'SESSIONID'),SYS_CONTEXT(
'USERENV', 'SESSION_USER'),SYS_CONTEXT('USERENV', 'TERMINAL'),SYS_CONTEXT('USERE
NV', 'OS_USER'),SYS_CONTEXT('USERENV', 'IP_ADDRESS'),SYSDATE,'ORA-1017',
program, module from v$session where audsid=SYS_CONTEXT('USERENV', 'SESSIONID') ;

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/350519/viewspace-1054835/,如需轉載,請註明出處,否則將追究法律責任。

相關文章