由于用户拥有的role权限在存储过程是不可用的。遇到这种情况,我们一般需要显示授权,如grant create table to user;但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程,实际上,oracle给我们提供了在存储过程中使用role权限的方法:修改存储过程,加入Authid Current_User时存储过程可以使用role权限。

下面以例子说明:

----执行存储过程p_create_emp2报下面的错误:
SQL> exec p_create_emp2;begin p_create_emp2; end;ORA-01031: 权限不足
ORA-06512: 在 "ECHO.P_CREATE_EMP2", line 12
ORA-06512: 在 line 2----查看p_create_emp2,该存储过程是要创建emp2表
create or replace procedure P_create_emp2 ascursor t_cursor isselect * from user_tables where table_name = 'EMP2';t_cur t_cursor%rowtype;num int:=0;
beginfor t_cur in t_cursor loopnum:=num+1;end loop;if num=1 thenexecute immediate 'drop table emp2 purge';execute immediate 'create table emp2 as select * from emp';elseexecute immediate 'create table emp2 as select * from emp';end if;
end P_create_emp2;----查看echo用户的角色或权限
SQL> select * from dba_role_privs where grantee='ECHO';GRANTEE                        GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
ECHO                           DBA                            NO           YES
----有dba的角色,说明建表的权限----修改存储过程p_create_emp2:
create or replace procedure P_create_emp2 authid current_user ascursor t_cursor isselect * from user_tables where table_name = 'EMP2';t_cur t_cursor%rowtype;num int:=0;
beginfor t_cur in t_cursor loopnum:=num+1;end loop;if num=1 thenexecute immediate 'drop table emp2 purge';execute immediate 'create table emp2 as select * from emp';elseexecute immediate 'create table emp2 as select * from emp';end if;
end P_create_emp2;----再次执行:
SQL> exec p_create_emp2;PL/SQL procedure successfully completedSQL> desc emp2;
Name     Type         Nullable Default Comments
-------- ------------ -------- ------- --------
EMPNO    NUMBER(4)    Y
ENAME    VARCHAR2(10) Y
JOB      VARCHAR2(9)  Y
MGR      NUMBER(4)    Y
HIREDATE DATE         Y
SAL      NUMBER(7,2)  Y
COMM     NUMBER(7,2)  Y
DEPTNO   NUMBER(2)    Y                ----在存储过程加了Authid Current_User选项,表创建成功。

转载于:https://www.cnblogs.com/Richardzhu/p/3460985.html

Oracle:Authid Current_User使用相关推荐

  1. Oracle之AUTHID CURRENT_USER

    没有AUTHID CURRENT_USER表示定义者权限(definer rights),以定义者身份执行: 加上AUTHID CURRENT_USER表示调用者权限(invoker rights), ...

  2. 使用 Authid Current_User 为调用者授权

    Authid Current_User 是调用者权限. oracle DB下面有2种执行的权限:定义者权限和调用者权限. 默认都是定义者权限.声明Authid Current_User后就是调用者权限 ...

  3. Authid current_user的用法

    Authid Current_User:以执行过程的用户的权限来处理涉及的对象权限. 这是典型的,数据库中只创建一个存储过程,所有用户都可以使用,但是每个用户使用的时候 只是用自己的权限权限执行,or ...

  4. Oracle存储过程返回游标实例详解

    复制代码 代码如下: CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHA ...

  5. Oracle proceduce返回数据集小结

    要从Oracle Procedure获得数据集合,通常采用Ref Cursor的方式,要获得此Cursor,有以下几种方式: 1.动态Sql返回: 这种情况下,Procedure的运算通常比较简单,比 ...

  6. Oracle 的 DBMS_SCN 修正以及 SCN 的 auto-rollover 新特性

    在 Oracle 11.2.0.2 之后,随着一系列 SCN 耗尽问题的出现,很多补丁涌现出来,一个新的 Package 增加进来. 这个 Package 就是 DBMS_SCN. 如果你的数据库中存 ...

  7. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  8. oracle接收输入参数,Oracle带输入输出参数存储过程(包括sql分页功能)

    记录一下,免得以后忘记了又要到处去找. begin /*这里不能直接执行select语句但可以直接执行update.delete.insert语句*/ end里面不能接执行select语句,声明会话级 ...

  9. 把sqlserver中存储过程改写到oracle中

    一同学叫我帮忙改存储过程sqlserver----->oralce数据中: sqlserver中存储过程: SET QUOTED_IDENTIFIER ON     GO  SET ANSI_N ...

最新文章

  1. 独家 | Python时间序列分析:一项基于案例的全面指南
  2. python神经网络训练数据_用Python从头开始实现一个神经网络
  3. python反转列表的三种方式
  4. 第四范式获信通院尖峰开源项目及开源人物双料大奖
  5. 动态壁纸小程序源码-带流量主
  6. 7723java梦游游戏,渠道SDK登录
  7. DEEPIN搭建J2EE时遇到This program requires DISPLAY en...
  8. vue 可用于交互的表格
  9. oracle分析函数sum() over()
  10. 计算机硬盘中没有设控制器,电脑设置硬盘为兼容模式
  11. 【DSP】TMS320C64x系列--SPRU871参考手册--中断控制器部分
  12. 计算机word的关闭怎么办,电脑无法打开Word提示已停止工作并自动退出怎么办
  13. 我们是选择开源CRM,还是选择商业CRM?
  14. windows批量修改文件权限
  15. Ubuntu 20.04.2 LTS 系统美化 (UOS主题)
  16. 推荐 :教你用神经网络求解高级数学方程!
  17. CSTC 部分pwn wp
  18. U-boot中控制台命令
  19. 实现BPS组织机构数据权限分离解决方案
  20. React SSR - 01 SSR 介绍 和 快速开始

热门文章

  1. NYOJ33 - 蛇形填数
  2. 计算机网络八校联考试题,2019届高三信息技术3月联考试卷有解析与答案
  3. java 同步块原理_Java同步代码块和同步方法原理与应用案例详解
  4. 需要多少次找出较轻的小球
  5. 多媒体分析与理解_多媒体在课堂教学中应用的研究研究报告(二)
  6. 枚举如何设置空白_2019-07-04 用VBA设置word中shape对象相对位置
  7. 软件工程师的技能知识图谱0.2
  8. token详解及常见防范措施
  9. Unity3D基础19:Tag标签
  10. Wannafly挑战赛27: E. 黄魔法师(构造)