限制資料庫登陸trigger

jelephant發表於2015-12-05
CREATE OR REPLACE TRIGGER LOGON_AUDIT AFTER
LOGON ON DATABASE
DECLARE
vRecord_num NUMBER;
vUserIp VARCHAR2(15);
vUser VARCHAR2(32);
vbeginip VARCHAR2(15);
vendip VARCHAR2(15);
vUserIp_num number;
vMachine VARCHAR2(32);
vModule VARCHAR2(64);
vNum number;
BEGIN
vUserIp:=SYS_CONTEXT ('USERENV','IP_ADDRESS');
vUser:=SYS_CONTEXT('USERENV','SESSION_USER');
vMachine :=SYS_CONTEXT('USERENV','TERMINAL');
if(vMachine in ('JIAXL-THINK','WANGYAN-PC') )then
RAISE_APPLICATION_ERROR(-20002,'使用者 :['||vMachine||']屬於黑名單使用者!');
end if;
IF (vUser = 'PUBLIC' or vUser = 'SYS') then
return;
End IF;
vNum :=1;
/*判斷登入限制表中是否存在該使用者*/
SELECT COUNT(*) INTO vRecord_num FROM tb_login_limit WHERE upper(loginuser)=upper(vUser);
/*如果使用者存在,則取出使用者資訊並迴圈*/
IF(vRecord_num>0)THEN
for cx in ( Select beginip,endip,isforelogin
from tb_login_limit
where upper(loginuser)=upper(vUser))
loop
/*如果使用者被標示可以前臺登入,則不作處理*/
if (cx.isforelogin > 0)
then
--insert login log
exit;
/*如果使用者不可以前臺登入*/
else
vUserIp_num := fun_ip_convert(vUserIp);
vbeginip := fun_ip_convert(cx.beginip);
vendip := fun_ip_convert(cx.endip);
vModule := SYS_CONTEXT('USERENV','MODULE');
/*使用者不可以前臺登入時,如果ip地址也不在允許訪問的ip之內,而且使用者條數已經判斷完全,則報錯*/
IF(vUserIp_num < vbeginip or vUserIp_num > vendip) THEN
if(vNum = vRecord_num)
then
RAISE_APPLICATION_ERROR(-20003,'使用者 :['||vUser||'],IP:['||vUserIp||']屬於受限使用者,請勿前臺登陸或聯絡DBA處理!');
exit;
else
vNum:=vNum+1;
end if;
/*使用者不可以前臺登入時,如果ip地址在允許訪問的ip之內,則不作處理,允許登入*/
ELSE
/*使用者不可以前臺登入時,如果ip地址在允許訪問的ip之內,但是用sqlplus登入的不允許*/
IF(upper(vModule) like 'SQLPLUS%' and vUserIp != '10.161.2.138')THEN
RAISE_APPLICATION_ERROR(-20004,'使用者 :['||vUser||'],IP:['||vUserIp||']屬於受限使用者,不能前臺登入你不知道嗎!');
exit;
else
NULL;
END IF;
--NULL;
END IF;
END IF;

end loop;
ELSE
RAISE_APPLICATION_ERROR(-20003,'使用者 :['||vUser||']屬於非法使用者,請勿前臺登陸或聯絡DBA處理!');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE;
WHEN VALUE_ERROR THEN
SYS.Dbms_Output.PUT_LINE('EXCEPTION HANDED');
WHEN OTHERS THEN
RAISE;
END LOGON_AUDIT; 

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

相關文章