« The Waiting Life | Blog首页 | How to maintain Oracle10g Recyclebin? »
Definer and Invoker Rights
链接:https://www.eygle.com/archives/2005/12/definer_and_invoker_rights.html
在Oracle8i以前,所有已编译存储对象(包括packages, procedures, functions, triggers, and views)只能以定义者(Definer)身份解析运行;从Oracle8i开始,Oracle引入调用者(invoker)权限,使得对象可以以调用者身份和权限执行。
定义者(Definer)指编译存储对象的所有者.
调用者(Invoker)指拥有当前会话权限的模式,这可能和当前登录用户相同或不同(alter session set current_schema 可以改变调用者Schema).
TOM在他的《Expert One on One》的第23章曾经详细介绍这一特性,本文引用Tom的一个例子用于说明Definer and Invoker权限。
1.以Eygle用户(definer)创建2个过程
$ sqlplus eygle/eygle SQL*Plus: Release 9.2.0.4.0 - Production on Sun Dec 11 11:39:27 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> create or replace procedure definer_proc Procedure created. SQL> Grant succeeded. SQL> Procedure created. SQL> Grant succeeded. |
注意invoker权限的本质是引入了AUTHID CURRENT_USER子句,通过此句Oracle得以使用invoker身份编译执行对象。
2.以test用户(invoker)身份执行
SQL> connect test/test PL/SQL procedure successfully completed. SQL> exec eygle.invoker_proc PL/SQL procedure successfully completed. |
注意只有使用invoker者权限执行时,Schema才转换为TEST.
SQL> alter session set current_schema = system; Session altered. SQL> exec eygle.definer_proc PL/SQL procedure successfully completed. SQL> exec eygle.invoker_proc PL/SQL procedure successfully completed. SQL> |
历史上的今天...
>> 2016-12-12文章:
>> 2012-12-12文章:
>> 2008-12-12文章:
>> 2006-12-12文章:
>> 2004-12-12文章:
By eygle on 2005-12-12 12:08 | Comments (3) | SQL.PLSQL | 572 |
謝謝...
不過對你所說的
"通过alter session set current_schema方式修改当前模式之后,我们看到仍然是仅当使用invoker权限执行时,Schmea方切换为SYSTEM."這句話還是有疑問,不知道能否在文檔區發表異意..呵...
謝謝...
不過對你所說的
"通过alter session set current_schema方式修改当前模式之后,我们看到仍然是仅当使用invoker权限执行时,Schmea方切换为SYSTEM."這句話還是有疑問,不知道能否在文檔區發表異意..呵...
哪里有疑问?结果不是很明显么?