首页 > 数据库技术 > 详细

【转】关于Oracle存储过程执行权限问题的解决

时间:2015-10-28 14:10:11      阅读:314      评论:0      收藏:0      [点我收藏+]

原文地址:http://blog.itpub.net/4227/viewspace-69049/

今天晚上升级,有个存储过程死活编译不过去,提示权限不足,但是用户是具有dba权限的,网上一查才知道,oracle存储过程分两种,DR(Definer‘s Rights ) Procedure和IR(Invoker‘s Rights ) Procedure。

    1、定义者权限:定义者权限PL/SQL程序单元是以这个程序单元拥有者的特权来执行它的,也就是说,任何具有这个PL/SQL程序单元执行权的用户都可以访问程序中的对象。所有具有执行权的用户都有相同的访问权限,在定义者权限下,执行的用户操作的schema为定义者,所操作的对象是定义者在编译时指定的对象。在定义者(definer)权限下,当前用户的权限为角色无效情况下所拥有的权限。
    2、调用者权限:调用者权限是指当前用户(而不是程序的创建者)执行PL/SQL程序体的权限。这意味着不同的用户对于某个对象具有的权限很可能是不同的,这个思想的提出,解决了不同用户更新不同表的方法。在调用者权限下,执行的用户操作的schema为当前用户,所操作的对象是当前模式下的对象。在调用者(invoker)权限下,当前用户的权限为当前所拥有的权限(含角色)。
    3、ORACLE默认为定义者权限,定义者权限在存储过程中ROLE无效,需要显示授权,例如在存储过程中调用其他用户的表,但是定义存储过程的当前用户没有显示访问该表的权限,即使当前用户具有dba角色,编译过程中也会出现权限不足的问题,因为role无效。
    定义存储过程时,通过指定AUTHID 属性,定义DR Procedure 和IR Procedure
DR Procedure 
1、定 义
    CREATE OR REPLACE procedure DEMO(ID in NUMBER) AUTHID DEFINER as
      ...
    BEGIN
      ...
    END DEMO;
IR Procedure
1、定 义
    CREATE OR REPLACE procedure DEMO(ID in NUMBER) AUTHID CURRENT_USER as
     ...
    BEGIN
     ...
    END DEMO;

【转】关于Oracle存储过程执行权限问题的解决

原文:http://www.cnblogs.com/badmemoryneedbadpen/p/4917104.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!