前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Oracle】-【ORA-01031】-创建基于数据字典表的视图无权限的问题

【Oracle】-【ORA-01031】-创建基于数据字典表的视图无权限的问题

作者头像
bisal
发布2019-01-29 10:12:18
1.1K0
发布2019-01-29 10:12:18
举报

执行

SQL> create or replace view redo_size as 

  2  select name, value from v$statname n, v$sesstat t, v$session s 

  3  where s.audsid = sys_context('USERENV','SESSIONID')

  4    and t.sid = s.sid

  5    and n.statistic#=t.statistic#

  6    and n.name = 'redo size';

select name, value from v$statname n, v$sesstat t, v$session s

                                                   *

ERROR at line 2:

ORA-01031: insufficient privileges

但单独执行

SQL> select name, value from v$statname n, v$sesstat t, v$session s 

  2  where s.audsid = sys_context('USERENV','SESSIONID')

  3    and t.sid = s.sid

  4    and n.statistic#=t.statistic#

  5    and n.name = 'redo size';

NAME          VALUE

redo size      2452

是可以的。

当前用户的权限包括:

ALTER SESSION

CREATE SESSION

UNLIMITED TABLESPACE

网上有帖子说:

1、赋予此方案对象SELECT ANY TABLE 的权限。-这里尝试后依旧报错。

2、使用grant select on v$statname to star,尝试后也是报错。

3、grant select any dictionary to test;-需l给用户授权查看任何字典的权限。尝试后可以建立。

我的理解:star这个用户可以单独访问v$statname、v$sesstat、v$session这些字典表,但CREATE VIEW时不行,根据惜分飞的文章介绍,有可能是因为是因为不同schema的问题,总结的:

1)在同一个schema下,有查询权限,就可以创建视图。

2)在不同schema下,即使有了查询权限,创建视图,还是会提示ORA-01031。

文章中介绍需要sys账户将数据字典的访问权限赋予star用户,但这里还要注意的是V$SESSION是一个public的同义词,根据前几篇博客介绍的方法,可以看到它封装的是x$ksuse这个表,好像没看到过将这种表赋予用户权限的?

这个问题的解决方法是赋予用户select any dictionary的权限。但除此之外是否还有其它方法?请高手指点!

>经过高手指教,这个问题最简单的方法就是用sys账户登录,grant select on v_$statname ... to user,将v$引用的v_$权限赋予用户,就可以了。select any dictionary这个权限最好不要轻易赋予普通用户。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013年08月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档