在探讨Oracle数据库中定义者与调用者权限之前,首先需要对这两个概念有一个明确的认识。定义者(Definer)是指编译存储对象的所有者,即PL/SQL程序单元的创建者。而调用者(Invoker)则指的是拥有当前会话权限的模式,这可能和当前登录用户相同或不同。在Oracle数据库中,一个PL/SQL程序单元执行时是以这个程序单元拥有者的特权来执行的。因此,任何具有这个PL/SQL程序单元执行权的用户都可以访问程序中的对象。 Oracle为数据库应用提供了两种权限模式:定义者权限模式(Definer's Rights)与调用者权限模式(Invoker's Rights)。定义者权限模式是默认的权限体系结构,在此模式下,PL/SQL程序单元在编译时拥有创建者的权限,即它以创建者(定义者)的用户ID执行。调用者权限模式则允许程序单元在调用时使用调用者的权限,这种模式从Oracle 8i版本开始引入。需要注意的是,ERP/CRM数据库应用程序通常使用调用者权限模式,而Oracle应用程序套件则使用定义者权限体系来共享通用代码组件和管理内部组件接口。 通过使用AUTHID CURRENT_USER关键字,我们可以将存储PL/SQL程序体定义为具有调用者权限的对象。在默认情况下,PL/SQL程序单元都是定义者权限程序单元。若一个过程被授予了execute any procedure系统权限,或者被该过程的定义者授权execute on,那么调用者即使没有使用AUTHID CURRENT_USER子句,同样可以使用这个过程。这说明了调用者权限模式提供了灵活的方式来控制执行的权限。 在定义权限时,我们会使用AUTHID CURRENT_USER或AUTHID DEFINER关键字来指定权限模式。如果PL/SQL程序使用了AUTHID DEFINER,那么程序将作为定义者执行;如果使用了AUTHID CURRENT_USER,程序则以调用者的身份执行。当前执行PL/SQL程序的用户并不一定是程序的创建者,他们可能通过授权来获得执行PL/SQL程序的权限。 使用定义者权限可以确保我们对集中式数据的插入、更新和删除操作有更好的控制力。相反,调用者权限可以让我们控制对分布式数据的同样操作。选择使用定义者还是调用者权限取决于应用的设计和安全性需求。在一些情况下,应用程序的创建者希望调用者能够访问程序中的对象,从而允许在没有明确授权的情况下执行程序单元。 在创建定义者与调用者权限的PL/SQL程序时,需要明确指定AUTHID关键字。如果PL/SQL单元本来就是定义者权限,那么默认情况下不需要特别指定AUTHID DEFINER。而要创建调用者权限的PL/SQL单元,则必须使用AUTHID CURRENT_USER关键字。例如,当一个由SYS创建的存储过程需要被SCOTT执行时,如果SCOTT没有被授权执行该程序单元,那么他需要使用AUTHID CURRENT_USER关键字创建PL/SQL程序,这样才能确保他具有编译权限和执行权限。 在进行数据库设计和开发时,合理地利用定义者权限和调用者权限可以提高应用的可控性和组织性,同时也能增强程序的安全性和易用性。通过对这两种权限的深入理解,开发者可以根据应用的实际需求来选择最合适的权限模式,从而保证数据的安全和程序的稳定运行。





























- banlingfeidu2014-08-11总结得非常好,很全面,比网页上的清晰,good。

- 粉丝: 4907
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 大数据时代的图书馆服务探究.docx
- 校园网络总体设计方案(终版).doc
- 基于BIM的工程项目管理系统及其运用分析.docx
- 电力信息化行业网络安全主动防御技术探讨.docx
- 顶层设计方案勾画“互联网-”行动蓝图-物流管理.doc
- 项目管理之风险预判.docx
- UbuntuLinux下jdk的安装与配置.doc
- 华东交通大学理工学院校园网络综合布线设计方案方案.doc
- cim-移动应用开发资源
- malagu-Typescript资源
- Go Web编程实战派源码-Go资源
- AntFlow.net-C#资源
- AJ-Captcha-PHP资源
- Layx-JavaScript资源
- SQLAuto-SQL资源
- com-计算机二级资源


