学习Oracle PL/SQL -执行权限模型(AUTHID DEFINER、AUTHID CURRENT_USER)

本文深入探讨Oracle PL/SQL的执行权限模型,包括定义者权限(AUTHID DEFINER)和调用者权限(AUTHID CURRENT_USER)。定义者权限模型确保程序在所有者权限下运行,控制底层数据访问,但可能导致权限解析问题。调用者权限模型则根据执行者权限解析SQL,适用于动态SQL和跨模式访问。理解这两种模型有助于优化权限管理和程序设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源《Oracle plsql 程序设计》
写存储过程时经常由于执行权限导致得不到想要的数据,现在详细看一下;
Oracle数据库为PL/SQL程序提供了两种对象许可模型,默认的是定义者权限(AUTHID DEFINER),使用这种模型,存储过程是运行在他的所有者权限下的;

1 定义者权限模型(AUTHID DEFINER)

执行存储过程前要前,程序要先编译并且保存到数据库中。一个程序通常保存在一个模式或者说一个数据库用户下,程序中可能会用到其他用户下的对象。

定义者权限模型的规则

1.程序中的任何外部引用都必须在编译时被解析,所使用的权限是编译时所在模式被直接赋予的权限
2.在编译存储过程时,数据库角色会被忽略。这个程序需要的所有权限都必须直接授予这个过程的定义者
3.当执行定义者权限模型编译的过程时,过程执行的sql都是运行于拥有这个过程的模式的权限之下;
4.尽管编译过程需要直接授权,可以把执行程序所需要的EXECUTE权限授予其他模式或角色;
使用定义者权限模型控制对底层数据的访问:
所有的订单处理数据放在OEData模式下;
所有的订单处理代码放在ODCode模式下,且编译Order_Mgt的权限直接授予了OECode,这个包允许下订单和取消订单;
在这里插入图片描述
为了保证正确更新订单,不允许除了OEcode以外的其他任何模式直接访问这个表。比如,加入Sam_Sales模式需要关闭旧订单,他不能通过Close_Old_Orders执行删除语句,必须通过调用Order_Mgt.cancel完成删除订单任务。

定义者权限模型的好处

1.能控制对底层结构的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值