(ref:http://tolywang.itpub.net/post/48/380276)


以一個例子來說明logon trigger的使用問題。






1、問題提出


如下只是一個舉例,自己修改一下可以完成更多的功能。想完成如下的功能:


 


<1>某一個Ip段的用戶不能登陸
<2>
針對的只是某一個或幾個用戶
<3>
對連接所用的應用程式也進行了限定。






2、問題解決


<1>如果你的logon trigger不是建在sys用戶下,v_$session的查詢許可權需要授權給給建trigger的用戶。




我選擇在system用戶下建:
SQL>connect / as sysdba;
SQL>grant select on v_$session to system;


<2>logon trigger


CREATE OR REPLACE TRIGGER QIUYB$LOGON AFTER
LOGON ON DATABASE
DECLARE
V_PROGRAM VARCHAR2(48);
V_MESSAGE VARCHAR2(1000);
V_BAD_LOGON EXCEPTION;
BEGIN
SELECT PROGRAM INTO V_PROGRAM
FROM V$SESSION
WHERE AUDSID = SYS_CONTEXT('USERENV', 'SESSIONID')
AND rownum<2;


IF USER IN ('QIUYB','HR')
AND sys_context('USERENV','ip_address') LIKE '10.199.168.%'
AND sys_context('USERENV','ip_address') LIKE '10.199.173.%'
AND lower(v_program)<>'zhyz_report.exe'
THEN
raise V_BAD_LOGON;
END IF;
EXCEPTION
WHEN v_bad_logon THEN
v_message := 'Uh Uh Uh! - This user can not logon with this software!!';
RAISE_APPLICATION_ERROR(-20002, v_message);
WHEN OTHERS THEN
v_message := 'FATAL ERROR - QIUYB$LOGON TRIGGER- Please Contact Your DBA!!' ||
CHR(10) || SQLERRM;
RAISE_APPLICATION_ERROR(-20003, v_message);


END;






3、特別說明


logon trigger對於dba許可權的用戶是沒效力的,只會在alter.log中生成報錯資訊。


 


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 噗噗噗的潛水珽 的頭像
    噗噗噗的潛水珽

    潛水珽的異想世界

    噗噗噗的潛水珽 發表在 痞客邦 留言(0) 人氣()