Logon Trigger Example 登陆例子

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

EXAMPLE 1)

有时候我们不希望使用者利用ODBC来连接上资料库,利用Access或者Excel来抓资料库资料。在道德劝说无效下,就直接挡下来!

BEGIN

FOR rec in (select username,program,SYS_CONTEXT('USERENV','IP_ADDRESS') ip from v$session

where audsid = userenv('sessionid')) loop

IF rec.IP = ?。16.64.19' AND rec.USERNAME = 'HR' AND upper(rec.program) in

('MSACCESS.EXE','SQLPLUSW.EXE','JREW.EXE','MSEXCEL.EXE')

THEN

EXIT;

ELSIF upper(rec.program) in ('MSACCESS.EXE','SQLPLUSW.EXE','JREW.EXE','MSEXCEL.EXE') THEN

raise_application_error(-20001,'Access Deny');

END IF;

END LOOP;

END;

只有HR并且由指定的IP 172.16.64.19才能使用ACCESS或者SQL*PLUS或者EXCEL连上来,其他的使用者皆无法连线。

但是,拥有DBA OR SYSDBA ROLE的权限帐号,是不会受到此限制。

EXAMPLE 2)

很多时候我们需要写一个logon trigger来进行帐号登入的控管。在Three - tier 架构下,大部分的程式可能都是由一个固定的帐号,授与适当的权限经由AP Server连接到后端的Oracle资料库来进行一般操作, 这个帐号的权限可能很大,而你并不希望programer利用这个帐号进入资料库做一些测试动作,因为这样就达不到有效权限控管的要求。可是这个AP专用的帐号及密码可能是半公开的,你如何防止这样的情况发生呢? 写一个logon trigger 也许是不错的主意。

CREATE OR REPLACE TRIGGER LOGON_DB_TRIGGER

AFTER LOGON ON DATABASE

DECLARE

IP VARCHAR2(30);

UNAME VARCHAR2(30);

BEGIN

SELECT SYS_CONTEXT ('USERENV','IP_ADDRESS'),USERNAME INTO IP,UNAME FROM V$SESSION

WHERE AUDSID=USERENV('SESSIONID');

IF IP != ?。16.64.33' AND

UNAME = 'APPLE' THEN

RAISE_APPLICATION_ERROR(-1,'CONNECTIION REFUSED');

END IF;

END;

写好这个Trigger,只要使用者帐号为apple,且来源IP不是172.16.64.33都会被拒绝连线掉喔!!这样是不是多了些安全管控呢?非凡注重一点,假如欲受限制的帐号权限为DBA or SYSDBA者,将不受此Trigger管制。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航