oracle杀进程报错01031,select视图报错ORA-01031(oracle跨用户基表视图授权)
一、场景说明:
同事将视图(A用户)的读取权限授予C用户后,
登录C用户后,读取该视图报错ORA-01031: 权限不足
二、遇到该问题时,我的处理思路:
1、首先该报错一般是创建视图会报,因为缺少CREATE VIEW权限,但读取视图报这个错误却属于非正常情况
2、忽略原理,首先尝试解决问题,询问该视图是否问跨用户视图,得到确认
3、询问是否所有视图相关基表的读取权限都赋予了C用户,得到肯定答复
并且得到反馈为,基表赋权后,直接通过视图的创建语句(select)进行读取可以获得结果,但直接读取视图依然报ORA-01031
4、当时无现成方案,决定赋予C用户select any table系统权限临时处理
三、问题诊断思路:
1、这种问题算诡异问题的一种。因为理论上,赋予视图读取权限要么成功后可以正常读取,要么因为权限不足报错ORA-00990: 权限缺失或无效。
如果报00990 一般为缺少其他用户相关基表的 with grant option,重新赋予读取权限并增加 with grant option解决即可。
2、询问同事是否使用A用户进行授权的,得到使用SYS用户进行直接授权的。怀疑与直接用SYS用户授权有关
四、问题场景模拟还原:
思路说明:创建A,B,C用户。A用户创建视图V_a,并包含B用户的dept表。通过sys用户将该视图的select权限赋予C用户。
1、创建用户
SQL> create user a identified by a account unlock;
用户已创建。
SQL> create user b identified by b account unlock;
用户已创建。
SQL> create user c identified by c account unlock;
用户已创建。
SQL> grant connect,resource to a,b,c;
授权成功。
2、创建表及相关视图
B用户
SQL> create table a.emp as select * from scott.emp;
表已创建。
SQL> create table b.dept as select * from scott.dept;
表已创建。
SQL> create view a.v_a as select a.* from a.emp a ,b.dept b where a.deptno=b.deptno;
create view a.v_a as select a.* from a.emp a ,b.dept b where a.deptno=b.deptno
*
第 1 行出现错误:
ORA-01031: 权限不足
SQL> grant select on b.dept to a;
授权成功。
SQL> create view a.v_a as select a.* from a.emp a ,b.dept b where a.deptno=b.deptno;
视图已创建。
3、错误重现
首先我们通过A用户直接授权,看会出现什么情况
SQL> conn a/a
已连接。
SQL> grant select on v_a to c;
grant select on v_a to c
*
第 1 行出现错误:
ORA-01720: 不存在 'B.DEPT' 的授权选项
这里明确提醒,a用户只有dept的select权限,但没有将该表的select权限赋予别人的能力
现在通过sys用户授权看看,看是否可以成功?。
SQL> conn / as sysdba
已连接。
SQL> grant select on a.v_a to c;
授权成功。
这里显示授权成功了,我们读取看看
SQL> conn c/c
已连接。
SQL> select * from a.v_a
2 ;
select * from a.v_a
*
第 1 行出现错误:
ORA-01031: 权限不足
错误重现。
五、解决方案
SQL> conn / as sysdba
已连接。
SQL> grant select on b.dept to a with grant option;
授权成功。
SQL> conn c/c
已连接。
SQL> select count(*) from a.v_a;
COUNT(*)
----------
14
问题处理完毕,但这不算结束。
因为这里是模拟环境,很容易就找到夸用户表,如果生产环境出现跨越多个用户,多个表,难道一个一个找?现在寻找脚本解决它。
编写脚本如下:
select 'grant select on '||referenced_owner||'.'||REFERENCED_NAME||' to '||owner||'with grant option;' from DBA_DEPENDENCIES where owner=upper('&viewowner') and name=upper('&viewname') and type='VIEW' and referenced_type='TABLE';
将该语句获得的结果通过dba用户执行即可。
涉及到两个变量
变量1、viewowner输入视图的拥有者
变量2、viewname 输入视图名称
六、整体演示(连脚本功能)
1、初始化环境
SQL> drop user a cascade;
用户已删除。
SQL> drop user b cascade;
用户已删除。
SQL> drop user c cascade;
用户已删除。
SQL> create user a identified by a account unlock;
用户已创建。
SQL> create user b identified by b account unlock;
用户已创建。
SQL> create user c identified by c account unlock;
用户已创建。
SQL>
SQL> grant connect,resource to a,b,c;
授权成功。
SQL> create table a.emp as select * from scott.emp;
表已创建。
SQL> create table b.dept as select * from scott.dept;
表已创建。
SQL> grant select on b.dept to a;
授权成功。
SQL> create view a.v_a as select a.* from a.emp a ,b.dept b where a.deptno=b.deptno;
视图已创建。
SQL> grant select on a.v_a to c;
授权成功。
SQL> conn c/c
已连接。
SQL> select count(*) from a.v_a;
select count(*) from a.v_a
*
第 1 行出现错误:
ORA-01031: 权限不足
通过脚本处理该问题
SQL> conn / as sysdba
已连接。
SQL> select 'grant select on '||referenced_owner||'.'||REFERENCED_NAME||' to &&viewowner with grant option;' from DBA_DE
PENDENCIES where name=upper('&viewname') and owner=upper('&&viewowner') and type='VIEW' and referenced_type='TABLE';
输入 viewowner 的值: a
输入 viewname 的值: v_a
原值 1: select 'grant select on '||referenced_owner||'.'||REFERENCED_NAME||' to &&viewowner with grant option;' from
DBA_DEPENDENCIES where name=upper('&viewname') and owner=upper('&&viewowner') and type='VIEW' and referenced_type='TABLE
'
新值 1: select 'grant select on '||referenced_owner||'.'||REFERENCED_NAME||' to a with grant option;' from DBA_DEPEND
ENCIES where name=upper('v_a') and owner=upper('a') and type='VIEW' and referenced_type='TABLE'
'GRANTSELECTON'||REFERENCED_OWNER||'.'||REFERENCED_NAME||'TOAWITHGRANTOPTION;'
--------------------------------------------------------------------------------
grant select on A.EMP to a with grant option;
grant select on B.DEPT to a with grant option;
SQL> grant select on A.EMP to a with grant option;
授权成功。
SQL> grant select on B.DEPT to a with grant option;
授权成功。
检查结果
SQL> conn c/c
已连接。
SQL> select count(*) from a.v_a;
COUNT(*)
----------
14
This case end;
Thank for watching;
====================================================
勤学如春起之苗,不见其增日有所长。辍学如磨刀之石,不见其损日有所亏
Email: orahank.dai@gmail.com QQ: 88285879
oracle杀进程报错01031,select视图报错ORA-01031(oracle跨用户基表视图授权)相关推荐
- oracle 杀进程
1.查看锁表进程 --1.查看锁表进程SQL语句 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.obje ...
- oracle数据库看开销,【Database】AIX系统下跟踪开销大的Oracle数据库进程
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE本文介绍AIX系统下跟踪开销大的Oracle数据库进程的具体运行语句等信息的方法. 方法一 ...
- oracle死锁进程杀不掉,oracle杀死死锁进程
先查看哪些表被锁住了 selectb.owner,b.object_name,a.session_id,a.locked_mode fromv$locked_objecta,dba_objectsb ...
- 不同scheam下查询视图报错ORA-01031的故障解决
客户在schema MEDADM下创建了一个视图,并且将视图的查询权限赋予给了另一个用户BAZK. 但是使用BAZK查询视图的时候还是报错: ORA-01031: insufficient privi ...
- linux系统报错01031,从ORA-01031报错看密码文件故障
3.问题分析二 从思路上,应该是没有问题.而且在无故障环境下,我们通过实验是可以验证结论的.首先一种思路是判断是不是密码文件被正确的使用. SQL> conn / as sysdba Conne ...
- 杀掉某个进程!怎么查看pid,报错:Address already in use
说在文前,菜鸟一个,如果有说的不对的,还请见谅,望能指出,让我这井底之蛙也能见见世面. 今天分享下一个比较常见的问题,端口被占用. 报错大致类型如下: 这里我是zookeeper开启的时候,报了Add ...
- Oracle 数据库设置最大进程数参数方法,oracle最大进程数满了处理方法,sysdba管理员登录报“maximum number of processes (150) exceeded“问题解决
oracle 数据库使用 sysdba 管理员登录报: ORA-00020: maximum number of processes (150) exceeded 译:超过了最大进程数(150) 方法 ...
- myelclipse Servers视图报错
有时候我们强制关闭eclipse的时候会导致我们的Servers视图报错 这个问题其实就是我们的myeclipse的工作空间出啦问题.删除工作空间的一个配置文件重新进行配置就可以解决 找到你的myec ...
- 解决64位进程调用32位库文件报错问题
解决64位进程调用32位库文件报错问题 解决64位进程调用32位库文件报错问题 大家集成的apk如果使用了第三方32位lib库文件的话请按如下方法修改Android.mk文件:库文件的拷贝方式为: L ...
最新文章
- KL变换+PCA+关系
- 分享Silverlight/Windows8/WPF/WP7/HTML5一周学习导读(5月6日-5月12日)
- mysql主键更新被锁_MySQL 的加锁处理,你都了解的一清二楚了吗?
- elasticsearch 客户端工具_万字长文:详解 Spring Boot 中操作 ElasticSearch
- charles 如何抓取web界面的包
- matlab绘制二元一次函数图像_【八上数学】 一次函数必考知识点(下)
- 在html中写js提示错误,页面HTML标签优化
- Codeforces 524C Idempotent functions
- day21 java的随机数
- HDU5470 Typewriter SAM 动态规划 单调队列
- Django中使用MySQL
- Modern UI for WPF的使用
- 采用HCNR200/201模拟量隔离电路分享
- Java虚拟机:垃圾收集
- 赶紧收藏!网上疯传的150个ChatGPT「超级提问模型」,都在这里了
- arcgis api 4.13 —— Layer详细介绍
- 快速搭建自己的风格迁移
- 学习心得flatten函数
- 有Zhì³者事竟成,坐二望一的新华三在想啥?
- 关于“部分便笺的元数据已被损坏,已将其恢复为默认值”的处理办法研究
热门文章
- 计算机医学英语论文,医学英语论文.doc
- 《嵌入式系统》知识总结2:Cortex-M3处理器和STM32
- LiveGBS流媒体平台-GBT28181国标视频平台录像存储设备录像回看解决方案
- linux 最小 电脑,世上最小「电脑」,能让一颗白米都显得像庞然大物
- 鸿蒙系统升级审核结果怎么查询,正式确认!华为给出结果,只要满足这个条件,即可升级鸿蒙系统...
- 拿什么拯救你,我的发际线
- 全球及中国良性前列腺增生((BPH))治疗仪行业研究及十四五规划分析报告
- 智能手机SoC行业现状调研及趋势分析报告
- 系统性能监控分析(Linux,Windows)
- 面向万物智联的应用框架的思考和探索(下)