相关文章推荐
失落的饼干  ·  学生扶老人反被索要十万老人或涉嫌诈骗诬告-中 ...·  8 月前    · 
俊逸的火锅  ·  在换脸app中,美国人发现了俄罗斯的阴谋?_ ...·  1 年前    · 
想表白的金鱼  ·  时差综合征- 诊断与治疗- 妙佑医疗国际·  1 年前    · 
乐观的松球  ·  关羽之死与荆州覆败有没有幕后黑手?_CCTV ...·  1 年前    · 
酷酷的匕首  ·  郑板桥(清代书画家、文学家)_百度百科·  1 年前    · 
小百科  ›  Oracle 定义者权限与调用者权限(AUTHID CURRENT_USER)-天翼云
英俊的桔子
10 月前

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
查看全部活动
热门活动
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 一键部署Llama3大模型学习机 0代码一键部署,预装最新主流大模型Llama3与StableDiffusion
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 云主机特惠 HOT 多款云主机新老同享,满足您的上云需求!
  • 推荐有礼 推荐新人实名注册有好礼,下单更得千元代金券!
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城 进入云市场
办公协同
  • WPS云文档 EMM手机管家 智能商业平台 SSL证书 新域名服务 翼电子教室 翼智慧显示一体化解决方案 税务风控云 翼云智眼安消一体化解决方案 翼信息化运维服务 翼微信营销解决方案 翼视频云归档解决方案 云管家2.0 智慧工厂_生产流程管理解决方案 全栈混合云敏捷版(软件) 全栈混合云敏捷版(一体机)

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云技术合作伙伴
  • 天翼云OpenAPI中心 天翼云EasyCoding平台
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云培训认证
  • 天翼云学堂 天翼云市场商学院
天翼云服务合作伙伴
  • 天翼云MSP合作伙伴 天翼云集成商交付能力认证
天翼云合作计划
  • 央企云合作计划
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴 天翼云甄选商城合作伙伴
天翼云东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
资源与工具
  • 天翼云OpenAPI EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂 天翼云认证

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • OpenAPI中心 客户支持计划 专家技术服务

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云 天翼云4.0 天翼云APP 全球基础设施 分析师和白皮书 天翼云·创新直播间 2024智算云生态大会 2023云生态大会 2022云生态大会 天翼云中国行 支持与服务 了解天翼云
  • 站点切换
    • 中国站
  • 文档
  • 控制中心
  • 备案
  • 管理中心

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

首页 知识中心 数据库 文章详情页

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

2023-05-31 08:42:36 阅读次数:85

Oracle, 权限, 用户

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权限。

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

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

1、执行的schema不同,操作的对象也不同

l 在定义者(definer)权限下,执行的用户操作的schema为定义者,所操作的对象是定义者在编译时指定的对象。

l 在调用者(invoker)权限下,执行的用户操作的schema为当前用户,所操作的对象是当前模式下的对象。

例如:

E:\ora10g>sqlplus "/ as sysdba"

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>create user tmpa identified by tmpa;

用户已创建。

SQL>grant connect,resource to tmpa;

授权成功。

SQL>create user tmpb identified by tmpb;

用户已创建。

SQL>grant connect,resource to tmpb;

授权成功。

SQL>conn tmpa/tmpa

已连接。

SQL>set sqlprompt TMPA>

TMPA>create table tmptbl(str varchar2(50));

表已创建。

TMPA>insert into tmptbl values ('I''m ownered by user:tmpa');

已创建 1 行。

TMPA>commit;

提交完成。

TMPA>create or replace procedure definer_proc as

2  begin

3    for x in (select sys_context('userenv', 'current_user') current_user,

4                     sys_context('userenv', 'session_user') session_user,

5                     sys_context('userenv', 'current_schema') current_schema,

6                     str

7                from tmptbl) loop

8      dbms_output.put_line('Current User:   ' || x.current_user);

9      dbms_output.put_line('Session User:   ' || x.session_user);

10      dbms_output.put_line('Current Schema: ' || x.current_schema);

11      dbms_output.put_line('Tables Value:    ' || x.str);

12    end loop;

13  end;

14  /

过程已创建。

TMPA>create or replace procedure invoker_proc AUTHID CURRENT_USER as

2  begin

3    for x in (select sys_context('userenv', 'current_user') current_user,

4                     sys_context('userenv', 'session_user') session_user,

5                     sys_context('userenv', 'current_schema') current_schema,

6                     str

7                from tmptbl) loop

8      dbms_output.put_line('Current User:   ' || x.current_user);

9      dbms_output.put_line('Session User:   ' || x.session_user);

10      dbms_output.put_line('Current Schema: ' || x.current_schema);

11      dbms_output.put_line('Tables Value:    ' || x.str);

12    end loop;

13  end;

14  /

过程已创建。

TMPA>set serveroutput on

TMPA>grant execute on definer_proc to tmpb;

授权成功。

TMPA>grant execute on invoker_proc to tmpb;

授权成功。

TMPA>exec definer_proc;

Current User:   TMPA

Session User:   TMPA

Current Schema: TMPA

Tables Value:    I'm ownered by user:tmpa

PL/SQL 过程已成功完成。

TMPA>exec invoker_proc;

Current User:   TMPA

Session User:   TMPA

Current Schema: TMPA

Tables Value:    I'm ownered by user:tmpa

PL/SQL 过程已成功完成。

可以看到,对于owner所拥有的对象,当前用户和session用户都是当前执行过程的用户;

新开一个连接,以tmpb用户登陆再执行看看:

E:\ora10g>sqlplus tmpb/tmpb

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL> set sqlprompt TMPB>

TMPB>create table tmptbl(str varchar2(50));

表已创建。

TMPB>insert into tmptbl values ('I''m ownered by user:tmpb');

已创建 1 行。

TMPB>commit;

提交完成。

TMPB>set serveroutput on

TMPB>exec tmpa.definer_proc;

Current User:   TMPA

Session User:   TMPB

Current Schema: TMPA

Tables Value:    I'm ownered by user:tmpa

PL/SQL 过程已成功完成。

TMPB>exec tmpa.invoker_proc;

Current User:   TMPB

Session User:   TMPB

Current Schema: TMPB

Tables Value:    I'm ownered by user:tmpb

PL/SQL 过程已成功完成。

调用非owner的过程,对于定义者权限的过程,虽然session是tmpb,但当前用户仍然是tmpa,访问的对象也是tmpa的表,而对于调用者权限的过程,当前session和用户都是当前执行过程的用户tmpb,而且访问的对象也是当前用户的对象。

2、执行的权限不同

l 在定义者(definer)权限下,当前用户的权限为角色无效情况下所拥有的权限。

l 在调用者(invoker)权限下,当前用户的权限为当前所拥有的权限(含角色)。

例如:

仍用前文中的用户

TMPA>create or replace procedure createtbl_definer as

2  begin

3    execute immediate 'create table tmptbl2 (id number)';

4  end;

5  /

过程已创建。

TMPA>create or replace procedure createtbl_invoker AUTHID CURRENT_USER as

2  begin

3    execute immediate 'create table tmptbl2 (id number)';

4  end;

5  /

过程已创建。

首先执行定义者权限过程:

TMPA>exec createtbl_definer;

BEGIN createtbl_definer; END;

*

第 1 行出现错误:

ORA-01031: 权限不足

ORA-06512: 在 "TMPA.CREATETBL_DEFINER", line 3

ORA-06512: 在 line 1

由于角色无效,相当于当前用户没有了建表权限,因此创建失败,这也正是为什么过程中执行DDL语句需要显示授权的原因。

TMPA>exec createtbl_invoker;

PL/SQL 过程已成功完成。

TMPA>desc tmptbl2

名称                                      是否为空? 类型

----------------------------------------- -------- ----------------------------

ID                                                 NUMBER

执行调用者权限过程,能够成功创建!

3、执行的效率不同

l 在定义者(definer)权限下,过程被静态编译静态执行(相对而言),所执行sql语句在共享区池中是可被共享使用的

l 在调用者(invoker)权限下,过程静态编译,但动态执行,虽然执行的语句相同,但不同用户执行,其sql语句在共享池中并不能共享。

归根结底,正如tom所说,调用者权限体系结构的确拥有非常强大的功能,但只有当你使用得当时才能感受到其优势。


版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/lhrbest/2712310,作者:小麦苗DB宝,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

上一篇: 【数据库数据恢复】windows server环境下SqlServer数据库文件未知原因丢失的数据恢复案例

下一篇: 数据结构这进制转换

相关文章

2024-07-01 01:32:15

使用Squid部署代理服务

Squid是Linux系统中最为流行的一款高性能代理服务软件,通常用作Web网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存.

2024-07-01 01:32:15
2024-06-24 07:23:24

Oracle性能优化学习笔记之WHERE子句中的连接顺序

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

2024-06-24 07:23:24
Oracle 2024-06-17 09:52:23

vmware 共享文件夹的权限问题

vmware 共享文件夹的权限问题

2024-06-17 09:52:23
vmware 2024-06-13 08:12:14

HDFS Web 报错:Permission denied: user=dr.who, access=READ_EXECUTE, inode=“/tmp“:root:supergroup:drwx

HDFS Web 报错:Permission denied: user=dr.who, access=READ_EXECUTE, inode=“/tmp“:root:supergroup:drwx

2024-06-13 08:12:14
2024-06-13 08:07:37

linux系统添加新用户并赋予相应权限

linux系统添加新用户并赋予相应权限

2024-06-13 08:07:37
linux 2024-06-12 09:30:16

RHEL 6/CentOS 6上安装Oracle 11.2.0.3(Gird/Database)及以上缺少pdksh包的解决方法

RHEL 6/CentOS 6上安装Oracle 11.2.0.3(Gird/Database)及以上缺少pdksh包的解决方法

2024-06-12 09:30:16
Oracle 2024-06-12 09:30:16

Oracle技巧:如何诊断一些未预料的 Oracle 错误(ORA-NNNN)

Oracle技巧:如何诊断一些未预料的 Oracle 错误(ORA-NNNN)

2024-06-12 09:30:16
Oracle 2024-06-11 09:14:49

10 Shrio Permission

10 Shrio Permission

2024-06-11 09:14:49
2024-06-11 08:54:33

3.ZooKeeper的acl权限控制「第二章 ZooKeeper使用」「架构之路ZooKeeper理论和实战」

ZooKeeper的ACL权限控制, 可以控制节点的读写操作, 保证数据的安全性,ZookeeperACL权限设置分为3部分组成, 分别是:权限模式(Scheme ) 、授权对象I(ID) 、权限信息(Permission ) 。

2024-06-11 08:54:33
ZooKeeper 2024-06-07 08:27:50

如何在Linux中踢掉远程登录用户?

如何在Linux中踢掉远程登录用户?

2024-06-07 08:27:50
linux
查看更多
推荐标签

作者介绍

天翼云小翼
天翼云用户

文章

22507

阅读量

2164934

查看更多

最新文章

Oracle性能优化学习笔记之WHERE子句中的连接顺序

2024-06-24 07:23:24

Oracle技巧:如何诊断一些未预料的 Oracle 错误(ORA-NNNN)

2024-06-12 09:30:16

RHEL 6/CentOS 6上安装Oracle 11.2.0.3(Gird/Database)及以上缺少pdksh包的解决方法

2024-06-12 09:30:16

逆向输出用户输入的数据

2024-06-06 09:46:02

Oracle分批提交DML

2024-06-05 08:57:09

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

2024-06-05 08:57:09

查看更多

热门文章

Oracle用SQL打印日历

2023-06-14 09:13:43

CentOS 7中安装Oracle JDK1.8环境

2023-05-18 09:33:22

【Tomcat】Oracle JDK与Apache Tomcat的版本兼容性关系

2023-06-06 05:54:30

【WebLogic】Oracle发布WebLogic中间件2022年第1季度安全公告

2023-06-08 06:16:02

Oracle数据库ASM磁盘组掉线,ASM实例不能mount解决方案

2022-11-15 16:49:47

【DB笔试面试759】在Oracle中,如果主库丢失归档文件,那么物理DG如何恢复?

2023-06-16 06:12:34

查看更多

热门标签

mysql MySQL redis oracle python linux leetcode Oracle
查看更多

相关产品

弹性云主机

随时自助获取、弹性伸缩的云服务器资源

天翼云电脑(公众版)

便捷、安全、高效的云电脑服务

对象存储

高品质、低成本的云上存储服务

云硬盘

为云上计算资源提供持久性块存储

查看更多

随机文章

Oracle监听器中的XDB、_XPT、_DGMGRL 、_DGB、PLSExtProc服务

Oracle集合类型

Oracle临时表空间和临时表介绍

打卡记录怎么存比较好

Oracle基础

Oracle Rac安装时多路径报错failed ready running

  • 7*24小时售后
  • 无忧退款
  • 免费备案
  • 专家服务
售前咨询热线
400-810-9889转1
  • 天翼云APP
    天翼云APP
 
推荐文章
失落的饼干  ·  学生扶老人反被索要十万老人或涉嫌诈骗诬告-中国法院网
8 月前
俊逸的火锅  ·  在换脸app中,美国人发现了俄罗斯的阴谋?_手机新浪网
1 年前
想表白的金鱼  ·  时差综合征- 诊断与治疗- 妙佑医疗国际
1 年前
乐观的松球  ·  关羽之死与荆州覆败有没有幕后黑手?_CCTV.com_中国中央电视台
1 年前
酷酷的匕首  ·  郑板桥(清代书画家、文学家)_百度百科
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号