Oracle 定义者权限与调用者权限(AUTHID CURRENT_USER)

Oracle定义者权限与调用者权限(AUTHID CURRENT_USER)



参考:

http://blog.itpub.net/7607759/viewspace-166557/

http://blog.itpub.net/7607759/viewspace-166558

http://blog.163.com/l_yongfei/blog/static/265673042009420103210297/

正如大家所知,Oracle从8i开始引入了调用者权限体系结构,之前一直使用定义者权限体系结构。

一、简单介绍一下二者的使用方法

oracle创建存储过程时,若不指定authid参数,则调用权限验证默认是definer,也就是存储过程执行时,以这个存储过程的创建者的身份来验 证存取权限;可以在创建存储过程时指定authid为current_user,从而在执行存储过程时根据当前调用存储过程的用户权限来验证。
举个例子说明:
比如有两个用户test和user1,test用户下有个表user1table,用户user1只有这个表的select权限。test创建了一个存储 过程testproc,使用默认的authid调用方式,存储过程内容为“insert into user1table ....”,然后使用grant execute on testproc to user1将执行权限赋予user1,那么user1就可以调用这个存储过程向user1table添加数据。注意:此时user1并没有对表 user1table的insert权限,但由于testproc执行的时候,是根据test用户的权限来验证的,因此insert语句不会出现权限不足 的提示。

假如创建testproc是添加了authid current_user,则当user1调用test.testproc存储过程时,就会报两个错误:一是user1table未定义,二是对 user1table没有insert权限。对于第一个问题,原因是user1table仅在test用户模式下,user1用户不能直接引用,可以在定 义testproc时使用test.user1table方式;对于第二个问题,由于user1没有对user1table的insert权限,因此无法 执行这个存储过程,除非给user1用户增加user1table表的insert权限。

二、定义者权限与调用者权限之间差异

关于定义者权限与调用者权限之间的相通点或者是各自优势本文不做探讨,这里仅描述调用者权限与定义者权限之间的差异,在我看来,主要有三个方面:

 

 

>   

        

       

>     

>   

>     

>   

>  >

>   

>       

  

>

>     

    

            

                         

                         

                       

                    

              

              

           

              

      

   

   

>       

    

            

                         

                         

                       

                    

              

              

           

              

      

   

   

>  

>     

>     

    

    

  

        

 

    

    

  

        

 

        

       

>   >

>   

>       

  

>

>  

    

    

  

        

 

    

    

  

        

 

 

 

>     

    

            

    

    

>       

    

            

    

    

  

  

 

    

   

 

                                        

   

                                                  

 

 



    

时间: 2024-10-28 03:34:10

Oracle 定义者权限与调用者权限(AUTHID CURRENT_USER)的相关文章

PL/SQL专家指南3——调用者权限和定义者权限 上篇

1.介绍定义者(definer)权限和调用者(invoker)权限的概念 定义者权限:定义者权限PL/SQL程序单元是以这个程序单元拥有者的特权来执行它的,也就是说,任何具有这个PL/SQL程序单元执行权的用户都可以访问程序中的对象.所有具有执行权的用户都有相同的访问权限,在定义者权限下,执行的用户操作的schema为定义者,所操作的对象是定义者在编译时指定的对象. 调用者权限:调用者权限是指当前用户(而不是程序的创建者)执行PL/SQL程序体的权限.这意味着不同的用户对于某个对象具有的权限很可

PL/SQL专家指南4——调用者权限和定义者权限 下篇

-------------------------------------------------------------调用者权限和定义者权限学习--------------------------------------------------- 转自群友shehasgone: --调用者权限的存储过程  print_table create or replace procedure print_table(p_query in varchar2) authid current_user i

使用调用者权限实现Schema导向操作

很多时候,我们都会使用存储过程Procedure来实现一些脚本工具.通过Procedure来实现一些数据库相关的维护.开发工作,可以大大提高我们日常工作效率.一个朋友最近咨询了关于Procedure调用的问题,觉得比较有意思,记录下来供需要的朋友不时之需. 1.问题描述 问题背景是这样,朋友在运维一个开发项目,同一个数据库中多个Schema内容相同,用于不同的测试目的.一些开发同步任务促使编写一个程序来实现Schema内部或者之间对象操作.从软件版本角度看,维护一份工具脚本是最好的方法,可以避免

Oracle的对象权限、角色权限、系统权限

Oracle的对象权限.角色权限.系统权限 一.用户与模式     用户:对数据库的访问,需要以适当用户身份通过验证,并具有相关权限来完成一系列动作        SYS用户,缺省始终创建,且未被锁定,拥有数据字典及其关联的所有对象        SYSTEM用户,缺省始终创建,且未被锁定,可以访问数据库内的所有对象     模式(schema):是某个用户拥有所有对象的集合.具有创建对象权限并创建了对象的用户称为拥有某个模式       注意:创建数据库对象(视图,表等)的任一用户都拥有一个以

Oracle 用户、对象权限、系统权限

--================================ --Oracle 用户.对象权限.系统权限 --================================   一.用户与模式     用户:对数据库的访问,需要以适当用户身份通过验证,并具有相关权限来完成一系列动作        SYS用户,缺省始终创建,且未被锁定,拥有数据字典及其关联的所有对象        SYSTEM用户,缺省始终创建,且未被锁定,可以访问数据库内的所有对象     模式(schema):是某个

Oracle的SYS用户登录报权限不足(insufficient privileges)

Oracle的SYS用户登录报权限不足(insufficient privileges) D:\Users\xiaomaimiao>sqlplus sys/lhr@192.168.1.31/orastrac  as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Sat Jul 15 11:36:54 2017 Copyright (c) 1982, 2010, Oracle.  All rights reserved. ERROR:ORA-0

ORACLE 存储过程中的Authid Current_User

ORACLE用户具有DBA权限,却会出现无法在存储过程里面创建一张普通表的现象.因为即使用户拥有DBA权限,用户拥有的role权限在存储过程是不可用的. 遇到这种情况,通常解决方法是进行显式的权限分配: grant create table to user a;但这种方法太麻烦,因为有可能执行一个存储过程,需要很多不同权限.实际上,oracle给我们提供了在存储过程中使用role权限的方法:修改存储过程,加入Authid Current_User进行权限分配. 在ORACLE8i以前的版本,所有

共享权限与NTFS权限的设置与管理

  当一个对象(如文件夹)同时使用了共享权限与NTFS权限时,它们之间有什么关系? 只有共享资源存储在使用NTFS文件系统的分区时,才会同时具有共享与NTFS权限.在同时具有共享与NTFS权限时,共享权限将成为第一道防线.有权限访问共享资源的账户,将首先受到共享权限的限制,共享权限将定义登录账户对共享资源最大的访问范围.作为第二道防线的NTFS权限,这个权限可以定义精细的权限. 当共享资源(如ABC文件夹)的共享权限与NTFS权限设置相同时,如对Everyone组都具有读取权限时,两种权限将互不

SSAS中CUBE行权限数据级权限控制

原文:SSAS中CUBE行权限数据级权限控制 去年做了一个数据仓库的项目,其中涉及到了CUBE数据级权限的控制.在网上找这方面的资料,找到一个[BI] 通用数据级权限控制解决方案的实现(二):Cube中的角色设置与数据级权限控制.根据这个大牛的思路,做完之后发现有几个问题: 1. 传递给CUBE的用户必须是域用户或者数据库服务器WINDOWS用户.如果BI系统不是用的AD域认证而是传统的FORM认证,那么,BI里的用户需要对应一个WINDOWS用户. 2. 另外的WEB程序里保存对cube的角色