Oracle logon trigger舉例

tolywang發表於2007-08-16

以一個例子來說明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中生成報錯資訊。

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

相關文章