限制資料庫登陸trigger
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;
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TRIGGER語法和建立一個限制IP登陸的triiger
- oracle 登陸限制ipOracle
- 透過TRIGGER限制IP登入
- oracle登陸限制指令碼Oracle指令碼
- 按 F12獲取登陸資料,一鍵登陸巴西衛生部資料庫資料庫
- 使用plsql develop內網登陸資料庫SQLdev內網資料庫
- oracle透過trigger來限制使用者和ip連線資料庫的限制Oracle資料庫
- 審計資料庫登陸登出觸發器資料庫觸發器
- 資料庫sqlserver2008登陸名密碼登陸不了怎麼辦?資料庫SQLServer密碼
- 資料庫hang分析(sql*plus不能登陸)[轉載]資料庫SQL
- 審計資料庫登陸失敗觸發器資料庫觸發器
- 資料庫的登入限制該怎麼實現?資料庫
- django限制使用者重複登陸Django
- ogg登陸資料庫使用者密碼加密資料庫密碼加密
- Oracle9i 中如何限制登陸IPOracle
- RMAN登陸及連線target資料庫的步驟方法資料庫
- 誤修改ORACLE_HOME導致無法登陸資料庫Oracle資料庫
- cacti登陸出現報錯:資料庫無法連線資料庫
- APEX 通過資料庫中使用者資訊驗證登陸資料庫
- oracle 程式滿了,登陸不上資料庫的解決方法Oracle資料庫
- 一次資料庫無法登陸的問題及排查資料庫
- 一次資料庫無法登陸的"問題"及排查資料庫
- 用觸發器記錄資料庫使用者登陸資訊觸發器資料庫
- 關於資料庫登陸名和資料庫使用者名稱的一點點心得資料庫
- oracle使用者登陸失敗次數限制修改Oracle
- 【限制】32G,作業系統限制?資料庫限制?作業系統資料庫
- Redis限制在規定時間範圍內登陸錯誤次數限制Redis
- 資料庫會話記錄使用者登陸的密碼資訊資料庫會話密碼
- ORACLE 10G使用SQLNET.ORA限制IP登陸Oracle 10gSQL
- SQL資料庫使用者只有“名稱”而無“登陸名”解決SQL資料庫
- SSH安全登陸原理:密碼登陸與公鑰登陸密碼
- 限制使用者在某個時間段內禁止登入資料庫資料庫
- python 獲取excel資料 自動登陸PythonExcel
- WinForm登陸:窗體間的資料傳遞ORM
- 登陸資訊顯示資料 : /etc/issue and /etc/motd
- Oracle資料庫限制訪問IPOracle資料庫
- 限制特定IP訪問資料庫資料庫
- aix系統資料庫sqlplus登陸報錯處理一例AI資料庫SQL