在Oracle中使用登录触发器初始化用户会话

Q496647264

Q496647264

2016-01-29 14:40

在Oracle中使用登录触发器初始化用户会话,在Oracle中使用登录触发器初始化用户会话

 你可能了解以前的USERENV函数,它返回会话值,如用户会话ID、语言、以及用户是否拥有数据库管理员权限。虽然由于遗留原因,USERENV函数仍在使用,但在Oracle 8i中,它已被一个新的函数所替代——SYS_CONTEXT。

 SYS_CONTEXT不仅能够返回USERENV数据——它还能返回应用程序定义的数据值。应用程序上下文包括一组可以被SYS_CONTEXT返回的名称(属性)和匹配数据(值)。例如,如果一个人事应用要返回用户的部门号,可以在应用程序中加入下面这行代码:


v_dept := SYS_CONTEXT('HR_CONTEXT', 'DEPT'); 

 Oracle 9i中推出的After Logon数据库触发器能够方便地初始化应用程序上下文中的属性。用户成功登录Oracle后,触发器启动,在指定的数据包中执行一个存储过程查询数据,并通过DBMS_SESSION.SET_CONTEXT过程把它放到上下文中。

使用这种方法有以下几个好处:

 ·它的性能更强。应用程序上下文数据保存在SGA中,访问它可以避免应用程序查询数据时重复读取磁盘。

 ·它更加安全。它使用一个与上下文有关的单独PL/SQL代码对象,通常是一个数据包来改变或清除上下文。After Logon触发器正是执行的这个数据包。

 ·它相当灵活。你可以建立任何你需要的上下文,每个上下文中可包含无限数量的属性-值对。

 列表A说明了一个叫做HR_CONTEXT_PKG的PL/SQL数据包。它查询当前用户会话应与哪个部门有关,从而初始化HR_CONTEXT上下文。

 然后你可以用下面的CREATE CONTEXT语句建立HR_CONTEXT命名空间,并把它与数据包相关联。

CREATE CONTEXT hr_context

USING HR.HR_CONTEXT_PKG;

 下面的代码说明了一个登录触发器,它在用户登录时调用安全数据包为用户初始化上下文。如果定位正确的部门出现错误,触发器将通过一个EXCEPTION(异常)处理它。否则,没有部门设置的用户将无法登录。

CREATE OR REPLACE TRIGGER DBT_LOGON

AFTER LOGON

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com)

ON DATABASE

BEGIN

HR.HR_CONTEXT_PKG.INITIALIZE_HR_CONTEXT;

EXCEPTION

WHEN OTHERS THEN

NULL;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com)

END;

/

 这样,现在任何应用程序都能够找出当前用户与哪个部门相关联,而不必进行多次逻辑读取,从一个表中查询它。例如:

SELECT SYS_CONTEXT('HR_CONTEXT','DEPT') FROM DUAL; 

 这行代码将返回当前用户的部门ID。

 Bob Watkins(OCP、MCDBA、MCSE、MCT)是一位有25年经验的计算机专业人士,从事过技术培训师、顾问与数据库管理员等职。

展开更多 50%)
分享

猜你喜欢

在Oracle中使用登录触发器初始化用户会话

电脑网络
在Oracle中使用登录触发器初始化用户会话

Oracle 触发器的使用小结

编程语言 网络编程
Oracle 触发器的使用小结

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

oracle 触发器 学习笔记

编程语言 网络编程
oracle 触发器 学习笔记

Oracle 触发器语法及实例(二)

编程语言 网络编程
Oracle 触发器语法及实例(二)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在登录触发器错误情况下连接SQL Server

编程语言 网络编程
在登录触发器错误情况下连接SQL Server

SQL Server 2008中的代码安全(二) DDL触发器与登录触发器

编程语言 网络编程
SQL Server 2008中的代码安全(二) DDL触发器与登录触发器

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何杀死oracle死锁进程

如何杀死oracle死锁进程

用PHP开发GUI

用PHP开发GUI
下拉加载更多内容 ↓