关于Oracle存储过程执行权限问题的解决

Argoverse数据集可视化/Argoverse-api argoverse可视化,argoverse-api配制方法 阅读详情

在数据库系统中存储过程是必不可少的利器,存储过程是预先编译好的为实现一个复杂功能的一段Sql语句集合。它的优点我就不多说了,说一下我碰到的问题吧。我在项目开发的过程中需要用存储过程来实现一个功能,其中涉及到判断一张表是否已经建立,没有建立就由存储过程来建立这张表。

CREATE OR REPLACE PROCEDURE TestProc
IS
  flag number;
BEGIN
  select count(*) into flag from all_tables where table_name='TEMP3';
  if (flag=0) then
     execute immediate 'create global temporary table TEMP3 on commit preserve rows as select * from BUSI_ECONTRACT';
  else
     execute immediate 'insert into TEMP3 select * from BUSI_ECONTRACT';
  end if;

END ;
写这段存储过程比较简单,在测试执行的过程中,系统出现如下提示:


从错误提示我们定位到错误,发现存储过程在执行 Create table语句时,权限不足。我尝试着把存储过程改成匿名存储过程在PL/SQL中执行,语句既然通过了。这说明这段语句没有问题,问题出现在执行存储过程中。我使用的是DBA帐号登录系统,按理应该不存在权限不足的问题呀。问题出现再哪里呢?通过上网查阅资料,发现Oracle对于执行存储过程有和Sql-Server不一样的规定,这个规定造成了执行建表语句权限不足。

Oracle规定,在默认的情况下,在调用存储过程用户的角色不起作用,即在执行存储过程时只有Public权限。所以在调用Create table时,会有权限不足的提示。

存储过程分为两种,即DR(Definer's Rights ) Procedure和IR(Invoker's Rights ) Procedure。为什么会有两种存储过程呢?其实考虑完下面的问题就清楚了。比如说用户hrch创建了删除表tar_table的存储过程drop_table(),当用户hrch调用时,即删除用户hrch下的表tar_table;如果是另一个用户scott调用呢?是删除用户scott下的tar_table表呢,还是删除用户hrch下的tar_table呢?另外,如果存储过程中包含建表语句,不管是用户hrch还是用户scott调用都会失败,因为Public没有建表权限,除非为Public grant建表权限。所以,存储过程的调用者会面临两个问题:

  存储过程的名称解析环境 
        存储过程的执行权限  

这两个问题可以在定义存储过程时,通过指定AUTHID 属性,即定义DR Procedure 和IR Procedure来解决。

DR Procedure

1、定 义
    CREATE OR REPLACE procedure DEMO(ID in NUMBER) AUTHID DEFINER as
      ...

    BEGIN

      ...

    END DEMO;
2、名称解析环境为定义该存储过程的用户所在的Schema。
3、执行该存储过程时只有Public权限。

IR Procedure

1、定 义

    CREATE OR REPLACE procedure DEMO(ID in NUMBER) AUTHID CURRENT_USER as
     ...
    BEGIN
     ...

    END DEMO;
2、名称解析环境为调用该存储过程的用户所在的Schema。
3、执行该存储过程时拥有调用者的所有权限,即调用者的Role是有效的。

我们碰到的问题只需要使用IR Procedure就能很快解决问题啦,我把代码修改为如下:

CREATE OR REPLACE PROCEDURE TestProc AUTHID current_user 
IS
  flag number;
BEGIN
  select count(*) into flag from all_tables where table_name='TEMP3';
  if (flag=0) then
     execute immediate 'create global temporary table TEMP3 on commit preserve rows as select * from BUSI_ECONTRACT';
  else
     execute immediate 'insert into TEMP3 select * from BUSI_ECONTRACT';
  end if;

END ;

执行存储过程,顺利通过。


RK3568平台(内存篇)DDR定频修改 如果需要DDR定频,则还需要注释掉其他多余的DDR频率,保留一个即可,例如注释掉opp-528000000、opp-1068000000、opp-1560000000,保留opp-2750000000则是定频最大频率。如果回退必须将 dmc_opp_table节点 的其他频率打开,否则系统无法选择到其他频率运行。ddr频点不对,先把ddr变频关掉,关闭后系统就不会一直重启了,以下是修改DDR频点的。rk3588修改定频节点在rk3588s.dtsi 的 dmc: dmc。 阅读详情

相关推荐

避坑指南:Abaqus网格划分中90%用户会遇到的5个质量陷阱(附解决方案)

本文深入剖析Abaqus网格划分中90%用户会遇到的5个典型质量陷阱,包括单元扭曲、扫掠网格失败、尺寸梯度控制等,并提供工程级解决方案。通过Python脚本和虚拟拓扑等技巧,帮助用户提升网格质量,确保有限元分析结果的可靠性,适用于CAE工程师和仿真分析师。

weixin_29243279的博客 96

关于 Oracle Schema 级别的权限问题

作者 | JiekeXu来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)如需转载请联系授权 |(个人微信 ID:JiekeXu_DBA)大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看关于 Oracle Schema 级别的权限问题,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!众所周知,在 Or...

JiekeXu的博客 3099

ROS教程(四):RVIZ使用教程(详细图文)

前言 根据前面的教程已经学会了创建功能包,那么本篇文章主要内容则是通过节点来发布数据至RVIZ

Leslie的博客 17万+

Oracle存储过程(包)中的执行没有权限?Authid Current_User使用

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

weixin_43286942的博客 1132

Excel数据清洗实战:8个必学函数搞定90%的脏数据问题(附案例)

本文通过一个完整的销售数据清洗案例,详细讲解了如何组合使用TRIM、CLEAN、SUBSTITUTE等8个核心Excel函数,构建自动化清洗流水线,高效解决日常办公中90%的脏数据问题,从而将时间留给更有价值的分析工作。

weixin_29215391的博客 582

论文阅读笔记(一)细粒度图像检索

0、参考文献 [1]见微知著 http://geek.youkuaiyun.com/news/detail/191718 [2]Xiu-Shen Wei 《Selective Convolutional Descriptor Aggregation for Fine-Grained Image Retrieval》 [3]Lingxi Xie 《Fine-Grained Image Search》 1...

huang2818138的博客 1万+

oracle 用户权限之执行存储过程权限不足

ORACLE 执行revoke dba from user_name后需要细粒度赋权限,否则用户没有在指定表空间创建表的权限、执行dml的权限以及执行存储过程的权限。

www_xue_xi的博客 1万+

树莓派与ROS2

树莓派与ROS2(Robot Operating System 2)的结合使用为机器人开发、自动化控制以及物联网项目提供了强大的平台。

weixin_47695827的博客 1754

ORACLE中存储过程的权限问题

或许你也遇到过同样的问题: 用sql语句建表没问题,但是放到存储过程里执行就报没有权限; 用sql查询或dml操作也是没问题,放到存储过程就报错权限不足,或表不存在. 在官方文档上看到有这么一段话 ,文档地址 h...

cuidingqing7516的博客 1219

Orange:一个基于 Python 的数据挖掘和机器学习平台

Orange是一个开源的数据挖掘和机器学习平台,采用可视化编程方式,用户可通过拖拽组件构建数据分析工作流。它支持交互式数据探索、多种机器学习算法,并允许Python脚本扩展。Orange特别适合教育和研究,提供直观的界面和丰富的可视化工具。最新版本为3.39.0,支持Windows、macOS和Linux系统。作为GPL许可的免费工具,它既能满足初学者需求,又能通过Python集成实现高级功能。

likuoelie的博客 1433

掌握C++新特性中智能指针的综合指南

本文是一篇关于C++中智能指针的综合指南,旨在深入探讨现代内存管理的核心概念和技术。智能指针是C++中一种强大的工具,可以帮助开发人员更安全、高效地管理内存资源。通过详细解析各种类型的智能指针,包括unique_ptr、shared_ptr和weak_ptr,读者将了解它们的原理、用法和适用场景。本文将重点介绍智能指针的优势,如自动内存释放、避免内存泄漏和循环引用等问题。此外,还将讨论智能指针与传统指针的区别,并提供一些最佳实践和实用技巧,帮助读者在实际项目中正确、高效地使用智能指针。

Lion_Long的博客 1200

【转】关于Oracle存储过程执行权限问题的解决

【转】关于Oracle存储过程执行权限问题的解决

dearbaba_11的博客 310

Unity中语法糖带来的GC问题 ——那些看起来优雅、实际上在背后偷偷生垃圾的代码

*语法糖(Syntactic Sugar)**指的是编程语言中为了让代码更简洁、易读而提供的简便写法。比如C#中的foreachlambda表达式LINQ自动属性等。语法糖本身不是坏事,但在Unity等对GC敏感的环境下,要警惕语法糖带来的隐式内存分配。合理使用语法糖,关键场合用更“丑陋”但高效的写法,才能保证游戏流畅运行。下面我将更深入地分析Unity中语法糖导致GC的原理、具体场景、检测与优化技巧,并补充一些容易忽视的细节。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 517

mysql 执行存储过程报权限错误,关于Oracle存储过程执行权限问题的解决

在数据库系统中存储过程是必不可少的利器,存储过程是预先编译好的为实现一个复杂功能的一段Sql语句集合。它的优点我就不多说了,在数据库系统中存储过程是必不可少的利器,存储过程是预先编译好的为实现一个复杂功能的一段Sql语句集合。它的优点我就不多说了,,说一下我碰到的问题吧。我在项目开发的过程中需要用存储过程来实现一个功能,其中涉及到判断一张表是否已经建立,没有建立就由存储过程来建立这张表。写这段存储...

weixin_36302350的博客 310

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Role 在存储过程中不可用

我们知道,用户拥有的role权限在存储过程是不可用的。如: SQL> select * from dba_role_privs where grantee=’SUK’; GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLESUK DBA NO

u011022054的博客 365

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

oracle杀死进程时权限不足_oracle 用户权限之执行存储过程权限不足

操作系统版本:[oracle@se31 ~]$ uname -aLinux se31 3.8.13-44.1.1.el6uek.x86_64 #2 SMP Wed Sep 10 06:10:25 PDT 2014 x86_64 x86_64 x86_64 GNU/Linux[oracle@se31 ~]$ cat /etc/redhat-releaseRed Hat Enterprise Linu...

weixin_39774445的博客 274

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Oracle中执行ddl权限,执行oracle中的job报错:ORA-12011:无法执行作业1存储过程执行DDL语句提示ORA-01031错误:权限不足...

LZ在做一个job执行每天新增一个表的操作时,存储过程运行没问题,job也创建成功,但运行job时,却报错:,后又用sys用户登陆创建了同样的存储过程和job,结果可以执行成功。当时就猜测是权限问题。后在网上搜索发现,这是因为存储过程中执行的是DDL命令,当前用户没有执行DDL的权限,引用另一篇文章中的内容如下:[plain] view plain copy总结,角色resource里也包括了c...

weixin_31109967的博客 1039

【权限】存储过程执行时,报ORA-01031权限不足

用户自己创建的存储过程,存储过程中也是处理自己schema的对象。存储过程中的每条SQL都行执行成功,但是执行存储过程就报出 下面的错误:ORA-00942: tabl...

cuiyanmin1936的博客 380

oracle 编译时权限不足,ORA-01031权限不足解决方法

在Oracle11gR2数据库上,以DBA权限的账号执行存储过程报错,PL/SQL:ORA-01031:权限不足,如下图原因:1、ORACLE默认为定义者权限,定义者权限在存储过程中ROLE无效,需要显示授权。2、如果使用AUTHID CURRENT_USER关键字使用调用者权限,则编译时ROLE无效,运行时有效。解决办法:方法1:对存储过程来说,CREATE TABLE想使用CREATE ANY...

weixin_33510225的博客 1万+

jamo Oracle,ORACLE 执行EXECUTE IMMEDIATE没反应

在用oracle的时候,我写了个存储过程,如下:create or replace procedure pro_table_create(tableName in varchar2,flag out varchar2)isbeginflag := '1';execute immediate 'CREATE TABLE ' || tableName || '(id number,name varch...

weixin_30513765的博客 492

执行存储过程提示权限不足ORA-01031

执行存储过程提示权限不足: 处理办法: [oracle@zyzhnew ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Dec 27 10:27:14 2021 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Releas..

sqlora的专栏 814

oracle存储过程动态执行sql语句-execute immediate方法执行sql 报权限不足解决

CREATE OR REPLACE PROCEDURE PRO_UPDATECARDVIEW(STYPE VARCHAR2, EA_CO_NAME VARCHAR2)**AUTHID CURRENT_USER** IS v_createsql varchar2(4000); v_coname varchar2(4000); BEGIN v_coname:=EA_CO_NAME; IF STYPE=...

雨果不下雨的博客 1476

ORACLE 存储过程权限问题

create user tester identified by tester;  grant connect ,dba to tester;  create user tester2 identified by tester;  grant connect,resource to tester2;  conn tester2/tester  create table t1(aa

JIANGJIAN12345的专栏 904

oracle存储过程指定动态sql时提示没有权限

背景: 在存储过程中执行动态sql,提示权限不足。 但单独执行插入数据的sql是能够正常执行的。 解决方案: 在存储过程声明的地方加上“AUTHID current_user” 没有AUTHID CURRENT_USER表示定义者权限(definer rights),以定义者身份执行; 加上AUTHID CURRENT_USER表示调用者权限(invoker rights),以调用者身份执行...

zona 2134

Oracle存储过程执行权限

Oracle存储过程执行权限 默认情况下,在调用存储过程用户的角色是不起作用的,即在执行存储过程时只有Public权限。所以如果被调用的存储过程中如果有executeimmediate 'create table..'语句,将会引发ORA-01031:insufficient privileges错误。 存储过程分为两种,即DR(Definer'sRights ) Procedur...

ljk168的专栏 3146

oracle存储过程中提示“权限不足”的解决办法

我们知道,用户拥有的role权限在存储过程是不可用的。如: SQL> select * from dba_role_privs where grantee='SUK'; GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE ------------ ------------ ------------ ------------ SUK DBA NO Y

卡索的专栏 1万+
上一篇: Oracle临时表学习小结
下一篇: JDBC中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
gavinloo
博客等级 码龄21年 48粉丝 53原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值