限制数据库登陆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; 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29337971/viewspace-1853861/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29337971/viewspace-1853861/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值