Oracle:Authid Current_User使用
由于用户拥有的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使用相关推荐
- Oracle之AUTHID CURRENT_USER
没有AUTHID CURRENT_USER表示定义者权限(definer rights),以定义者身份执行: 加上AUTHID CURRENT_USER表示调用者权限(invoker rights), ...
- 使用 Authid Current_User 为调用者授权
Authid Current_User 是调用者权限. oracle DB下面有2种执行的权限:定义者权限和调用者权限. 默认都是定义者权限.声明Authid Current_User后就是调用者权限 ...
- Authid current_user的用法
Authid Current_User:以执行过程的用户的权限来处理涉及的对象权限. 这是典型的,数据库中只创建一个存储过程,所有用户都可以使用,但是每个用户使用的时候 只是用自己的权限权限执行,or ...
- Oracle存储过程返回游标实例详解
复制代码 代码如下: CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHA ...
- Oracle proceduce返回数据集小结
要从Oracle Procedure获得数据集合,通常采用Ref Cursor的方式,要获得此Cursor,有以下几种方式: 1.动态Sql返回: 这种情况下,Procedure的运算通常比较简单,比 ...
- Oracle 的 DBMS_SCN 修正以及 SCN 的 auto-rollover 新特性
在 Oracle 11.2.0.2 之后,随着一系列 SCN 耗尽问题的出现,很多补丁涌现出来,一个新的 Package 增加进来. 这个 Package 就是 DBMS_SCN. 如果你的数据库中存 ...
- Oracle存储过程中异常Exception的捕捉和处理
Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...
- oracle接收输入参数,Oracle带输入输出参数存储过程(包括sql分页功能)
记录一下,免得以后忘记了又要到处去找. begin /*这里不能直接执行select语句但可以直接执行update.delete.insert语句*/ end里面不能接执行select语句,声明会话级 ...
- 把sqlserver中存储过程改写到oracle中
一同学叫我帮忙改存储过程sqlserver----->oralce数据中: sqlserver中存储过程: SET QUOTED_IDENTIFIER ON GO SET ANSI_N ...
最新文章
- 独家 | Python时间序列分析:一项基于案例的全面指南
- python神经网络训练数据_用Python从头开始实现一个神经网络
- python反转列表的三种方式
- 第四范式获信通院尖峰开源项目及开源人物双料大奖
- 动态壁纸小程序源码-带流量主
- 7723java梦游游戏,渠道SDK登录
- DEEPIN搭建J2EE时遇到This program requires DISPLAY en...
- vue 可用于交互的表格
- oracle分析函数sum() over()
- 计算机硬盘中没有设控制器,电脑设置硬盘为兼容模式
- 【DSP】TMS320C64x系列--SPRU871参考手册--中断控制器部分
- 计算机word的关闭怎么办,电脑无法打开Word提示已停止工作并自动退出怎么办
- 我们是选择开源CRM,还是选择商业CRM?
- windows批量修改文件权限
- Ubuntu 20.04.2 LTS 系统美化 (UOS主题)
- 推荐 :教你用神经网络求解高级数学方程!
- CSTC 部分pwn wp
- U-boot中控制台命令
- 实现BPS组织机构数据权限分离解决方案
- React SSR - 01 SSR 介绍 和 快速开始