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

简介: Oracle定义者权限与调用者权限(AUTHID CURRENT_USER) 参考: http://blog.

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





参考:




正如大家所知,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权限。

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

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

 

 

>   

        

       

>     

>   

>     

>   

>  >

>   

>       

  

>

>     

    

            

                         

                         

                       

                    

              

              

           

              

      

   

   

>       

    

            

                         

                         

                       

                    

              

              

           

              

      

   

   

>  

>     

>     

    

    

  

        

 

    

    

  

        

 

        

       

>   >

>   

>       

  

>

>  

    

    

  

        

 

    

    

  

        

 

 

 

>     

    

            

    

    

>       

    

            

    

    

  

  

 

    

   

 

                                        

   

                                                  

 

 







    

img_e3029f287d989cd04bd75432ecc1c172.png
DBA笔试面试讲解
欢迎与我联系

目录
相关文章
|
5月前
|
SQL 存储 Oracle
Oracle的PL/SQL定义变量和常量:数据的稳定与灵动
【4月更文挑战第19天】在Oracle PL/SQL中,变量和常量扮演着数据存储的关键角色。变量是可变的“魔术盒”,用于存储程序运行时的动态数据,通过`DECLARE`定义,可在循环和条件判断中体现其灵活性。常量则是不可变的“固定牌”,一旦设定值便保持不变,用`CONSTANT`声明,提供程序稳定性和易维护性。通过 `%TYPE`、`NOT NULL`等特性,可以更高效地管理和控制变量与常量,提升代码质量。善用两者,能优化PL/SQL程序的结构和性能。
|
5月前
|
Oracle 关系型数据库 数据库
Oracle查询优化-复制表的定义及数据
【1月更文挑战第5天】【1月更文挑战第14篇】在Oracle数据库中,复制表定义和复制表数据是两个常见的操作。
96 1
|
3月前
|
Oracle 安全 关系型数据库
|
5月前
|
SQL Oracle 关系型数据库
【ORACLE】 事务 | 锁 | 约束 | 权限、角色与用户管理
【ORACLE】 事务 | 锁 | 约束 | 权限、角色与用户管理
58 1
|
12月前
|
SQL Oracle 关系型数据库
9-7 Oracle如何管理权限和角色
9-7 Oracle如何管理权限和角色
279 0
|
存储 SQL Oracle
Oracle-PROCEDURE权限解读
Oracle-PROCEDURE权限解读
259 0
|
Oracle 关系型数据库 Linux
如果oracle用户下的$ORACLE_HOME bin oracle文件的属主或权限出了问题,那么该如何修复呢?
如果oracle用户下的$ORACLE_HOME bin oracle文件的属主或权限出了问题,那么该如何修复呢?
370 1
|
SQL 存储 缓存
Oracle数据库PL/SQL学习笔记——函数定义
Oracle数据库PL/SQL学习笔记——函数定义
224 0
|
SQL Oracle 关系型数据库
Oracle数据库PL/SQL学习笔记三——复合数据的定义
Oracle数据库PL/SQL学习笔记三——复合数据的定义
197 0

推荐镜像

更多