首页 > Oracle > Oracle logon trigger举例

Oracle logon trigger举例

以一个例子来说明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权限的用户是没效力的。

分类: Oracle 标签: , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.