Oracle-PROCEDURE权限解读
问题
存过中有查询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权限解读相关推荐
- Oracle管理权限和角色
Oracle管理权限和角色 基本介绍 当刚刚建立用户时,用户没有任何权限,也不能执行任何操作.如果要执行某种特定的数据库操作,则必需为其授予系统的权限:如果用户要访问其它方案的对象,则必需为其授予对象 ...
- oracle中授予connect权限,oracle授予权限
CONNECT角色: --是授予最终用户的典型权利,最基本的 CREATE SESSION --建立会话 RESOURCE角色: --是授予开发人员的 CREATE CL ...
- oracle用户常用权限,Oracle用户权限分配的具体方法【常用财务软件使用教程】
Oracle用户权限分配的具体方法 这里我们将介绍Oracle用户权限分配和Oracel从服务器导出数据的方法,希望能对大家有所帮助. 对于Oracle用户权限分配,很多人觉得不是很困难,但是要做好O ...
- oracle对象权限回收,【Privilege】Oracle对象权限级联收回现象测试
Oracle权限分为系统权限和对象权限.在文章<[Privilege]Oracle系统权限非级联收回现象测试>(http://space.itpub.net/519536/viewspac ...
- 绿标2.0隐私权限解读——应用分类及对应权限展示
昨日<绿标2.0隐私权限解读>对17类权限进行了说明,由于不同应用对应的权限有所区别. 本期内容,我们将对旅游住宿.美食.拍摄美化.汽车.商务.社交通讯.实用工具.新闻阅读.影音娱乐.运动 ...
- sqlserver2000给账户授予所有的权限_内网渗透 | 域内权限解读
域内权限解读 目录 域本地组 全局组 通用组 A-G-DL-P策略 内置组 几个比较重要的域本地组 几个比较重要的全局组.通用组的权限 域本地组 多域用户访问单域资源(访问同一个域) 可以从任何域添加 ...
- grid赋予oracle磁盘权限,grid 与 Oracle 用户下 Oracle 程序权限不一致导致无法连接 ASM 问题...
grid 与 Oracle 用户下 Oracle 程序权限不一致导致无法连接 ASM 问题 在 RAC 中, 启动数据库时遇到如下报错:Oracleinstance started. TotalSys ...
- ORACLE对象权限被非授权用户收回的可行性探究
基本的,众所周知对于ORACLE的系统权限,由sysdba角色的用户赋予用户A该权限,并通过WITH ADMIN OPTION将级联赋权的权限赋予用户A,A又将该权限赋予用户B时,B的该系统权限既可被 ...
- 取消权限 oracle,Oracle撤销权限
Oracle撤销权限 Oracle撤销权限的概念就是对用户或角色的权限的回收,也就是对用户删除某个系统权限或者删除某个对象的操作权限. Oracle撤销系统权限 Oracle撤销系统权限只有具有DBA ...
- 什么是oracle权限吗,Oracle用户权限的2种分类以及用途
权限是用户对一项功能的执行权力.在Oracle中,根据系统管理方式不同,将权限分为系统权限与实体权限两类.系统权限是指是否被授权用户可以连 接到数据库上,在数据库中可以进行哪些系统操作.而实体权限是指 ...
最新文章
- vim command(vim命令)
- Redis的API调用工具类
- 分治递归逆序数_[模板] 归并排序 逆序数 分治
- Java异常处理和设计
- WEB攻击手段及防御第1篇-XSS
- 剑指Offer - 面试题45. 把数组排成最小的数(字符串排序)
- NIPS 2018 | 中科院自动化所两篇入选论文:高清真实图像生成领域及GAN研究在人脸识别领域的进展...
- java读取与写入excel(.xls .xlsx)
- 买得起修不起?华为Mate X 5G维修价格公布:被吓到了
- LAMP的部署(一)
- 微信测试公众号-jssdk基本配置和使用-thinkphp
- cmd 取消点击锁定功能
- 从三大标准衡量hypervisor
- Ubuntu 搭建强大的 IDE —— Vim + Vundle + 插件
- 猫咪APP 服务器不稳定,猫咪app网速很慢(猫咪网速很差怎么解决)
- 火影忍者服务器维护时间,1月4日停机更新公告
- GeoTool常见问题
- 计算机显示技术发展,显示技术的发展 与展望
- java 匿名接口_匿名内部类实现接口
- 数据库设计-学生管理系统数据库系统