姓名:杨宝秋,OCM,ACE。近8年的TB级数据库设计、建设、管理、运行维护、调优经验,也做了7年的Hp和IBM Rs6000的系统管理员,而且是获得了BCFP认证的SAN管理员,现为中国联通黑龙江分公司数据库主管。

Oracle logon trigger举例

上一篇 / 下一篇  2008-01-31 08:21:17 / 个人分类:Oracle

以一个例子来说明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中生成报错信息。


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2008-07-09  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 5552
  • 日志数: 63
  • 图片数: 1
  • 建立时间: 2008-01-30
  • 更新时间: 2008-06-05

RSS订阅

Open Toolbar