问题

存过中有查询dba_相关的数据字典视图,编译时却提示 ‘表或视图不存在’,编译不通过。

但是报错的语句在SQL中确实可以查到的,说明问题并不是提出给出的’表或视图不存在’导致的。

这里需要注意SQL权限和存过的权限是不同的。

我们查询的是sys用户下的数据字典,需要显示授权
虽然cc用户也是DBA用户。

 select * from dba_role_privs where grantee='CC';


解决办法

oracle存储过程默认定义者权限,但ROLE对存储过程不可见。
因此需要给cc用户显示赋权。 使用authid current_user也不行。

使用sys用户

grant select any dictionary to cc;

重新编译,通过


知识引申

oracle存储过程分两种,DR(Definer’s Rights ) Procedure和IR(Invoker’s Rights ) Procedure。

在执行存储过程时,我们可能会遇到权限问题

  • AUTHID DEFINER (定义者权限):指编译存储对象的所有者。也是默认权限模式。
  • AUTHID CURRENT_USER(调用者权限):指拥有当前会话权限的模式,这可能和当前登录用户相同或不同(alter session set current_schema 可以改变调用者Schema)

在数据库中创建存储过程时,定义者权限是缺省模式。

当指定AUTHID CURRENT_USER关键字后,便是调用者权限存储过程.

它们之间最根本的差异在于role能否在存储过程中生效


定义者权限存储过程问题

定义者权限存储过程role无效,必须要有显式授权。即便是拥有dba role,还是不能访问不同用户的表。

有时候可能需要进行非常多的授权才能执行存储过程,稍显麻烦。

oracle给我们提供了在存储过程中使用role权限的方法:
修改存储过程,加入Authid Current_User时存储过程可以使用role权限(调用者权限)。

栗子

编译通过

执行失败。

方法一:使用sys用户赋权限

SQL> conn  sys/****** as sysdba;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as sys@cc AS SYSDBASQL> grant create table to cc;Grant succeeded

重新执行

SQL> exec p_test_proc_priv;PL/SQL procedure successfully completed

方法二 :修改存储过程,加入Authid Current_User时存储过程可以使用role权限。

现在先回收掉权限,改用另外的方式

SQL> conn  sys/****** as sysdba;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as sys@cc AS SYSDBA
SQL> revoke create table from cc;Revoke succeeded

重新执行后:

SQL> exec p_test_proc_priv;begin p_test_proc_priv; end;ORA-01031: insufficient privileges
ORA-06512: at "CC.P_TEST_PROC_PRIV", line 4
ORA-06512: at line 2

直白的说,就是让这个存过拥有当前用户的权限,如果这个用户可以create table,那么这个存过通过authid current_user,也获得该用户的权限。


修改存过

记得先把已经 exec 执行存过创建的表 drop掉,否则报错。


ORACLE权限相关

查看一个用户的所有系统权限(包含角色的系统权限)

select privilege from dba_sys_privs where grantee='DATAUSER'
union
select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='DATAUSER' );   

查看Oracle提供的系统权限

select name from sys.system_privilege_map a order by a.name ;

oracle 11g中 209条数据

Oracle-PROCEDURE权限解读相关推荐

  1. Oracle管理权限和角色

    Oracle管理权限和角色 基本介绍 当刚刚建立用户时,用户没有任何权限,也不能执行任何操作.如果要执行某种特定的数据库操作,则必需为其授予系统的权限:如果用户要访问其它方案的对象,则必需为其授予对象 ...

  2. oracle中授予connect权限,oracle授予权限

    CONNECT角色:    --是授予最终用户的典型权利,最基本的 CREATE    SESSION    --建立会话 RESOURCE角色:    --是授予开发人员的 CREATE    CL ...

  3. oracle用户常用权限,Oracle用户权限分配的具体方法【常用财务软件使用教程】

    Oracle用户权限分配的具体方法 这里我们将介绍Oracle用户权限分配和Oracel从服务器导出数据的方法,希望能对大家有所帮助. 对于Oracle用户权限分配,很多人觉得不是很困难,但是要做好O ...

  4. oracle对象权限回收,【Privilege】Oracle对象权限级联收回现象测试

    Oracle权限分为系统权限和对象权限.在文章<[Privilege]Oracle系统权限非级联收回现象测试>(http://space.itpub.net/519536/viewspac ...

  5. 绿标2.0隐私权限解读——应用分类及对应权限展示

    昨日<绿标2.0隐私权限解读>对17类权限进行了说明,由于不同应用对应的权限有所区别. 本期内容,我们将对旅游住宿.美食.拍摄美化.汽车.商务.社交通讯.实用工具.新闻阅读.影音娱乐.运动 ...

  6. sqlserver2000给账户授予所有的权限_内网渗透 | 域内权限解读

    域内权限解读 目录 域本地组 全局组 通用组 A-G-DL-P策略 内置组 几个比较重要的域本地组 几个比较重要的全局组.通用组的权限 域本地组 多域用户访问单域资源(访问同一个域) 可以从任何域添加 ...

  7. grid赋予oracle磁盘权限,grid 与 Oracle 用户下 Oracle 程序权限不一致导致无法连接 ASM 问题...

    grid 与 Oracle 用户下 Oracle 程序权限不一致导致无法连接 ASM 问题 在 RAC 中, 启动数据库时遇到如下报错:Oracleinstance started. TotalSys ...

  8. ORACLE对象权限被非授权用户收回的可行性探究

    基本的,众所周知对于ORACLE的系统权限,由sysdba角色的用户赋予用户A该权限,并通过WITH ADMIN OPTION将级联赋权的权限赋予用户A,A又将该权限赋予用户B时,B的该系统权限既可被 ...

  9. 取消权限 oracle,Oracle撤销权限

    Oracle撤销权限 Oracle撤销权限的概念就是对用户或角色的权限的回收,也就是对用户删除某个系统权限或者删除某个对象的操作权限. Oracle撤销系统权限 Oracle撤销系统权限只有具有DBA ...

  10. 什么是oracle权限吗,Oracle用户权限的2种分类以及用途

    权限是用户对一项功能的执行权力.在Oracle中,根据系统管理方式不同,将权限分为系统权限与实体权限两类.系统权限是指是否被授权用户可以连 接到数据库上,在数据库中可以进行哪些系统操作.而实体权限是指 ...

最新文章

  1. vim command(vim命令)
  2. Redis的API调用工具类
  3. 分治递归逆序数_[模板] 归并排序 逆序数 分治
  4. Java异常处理和设计
  5. WEB攻击手段及防御第1篇-XSS
  6. 剑指Offer - 面试题45. 把数组排成最小的数(字符串排序)
  7. NIPS 2018 | 中科院自动化所两篇入选论文:高清真实图像生成领域及GAN研究在人脸识别领域的进展...
  8. java读取与写入excel(.xls .xlsx)
  9. 买得起修不起?华为Mate X 5G维修价格公布:被吓到了
  10. LAMP的部署(一)
  11. 微信测试公众号-jssdk基本配置和使用-thinkphp
  12. cmd 取消点击锁定功能
  13. 从三大标准衡量hypervisor
  14. Ubuntu 搭建强大的 IDE —— Vim + Vundle + 插件
  15. 猫咪APP 服务器不稳定,猫咪app网速很慢(猫咪网速很差怎么解决)
  16. 火影忍者服务器维护时间,1月4日停机更新公告
  17. GeoTool常见问题
  18. 计算机显示技术发展,显示技术的发展 与展望
  19. java 匿名接口_匿名内部类实现接口
  20. 数据库设计-学生管理系统数据库系统

热门文章

  1. C语言指针是什么?1分钟彻底理解C语言指针的概念
  2. Linux下CMake简明教程(九) 添加控制选项
  3. mongodb 内存限制
  4. python 栈实现
  5. 图论算法-图论的表示、分类及基本概念(系列1)
  6. 50. Leetcode 105. 从前序与中序遍历序列构造二叉树 (二叉树-二叉树构建)
  7. 滴滴算法大赛算法解决过程 - 方案设计
  8. 中兴服务器raid配置_-服务器Raid卡更换后如何恢复硬盘Raid组信息
  9. 【码农本色】用数据解读我的2014
  10. 使用HtmlUnit获取html页面