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

执行

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这个权限最好不要轻易赋予普通用户。

时间: 2024-07-30 21:58:05

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

Oracle数据库如何创建第一张表_oracle

对于Oracle数据库的使用,创建一张符合自己需求的表是至关重要的,下面就让我们进行创建第一张属于自己的表 创建表时有两种种方式: (1)在cmd里边更具需要进行创建 (2)在sql developer中进行创建,而对于在可视化界面sqldeveloper中创建时,也有两种方式,即一种是使用命令直接进行创建,另外一种是使用可视化界面按钮进行点击创建 下面就是创建的具体过程: (1)首先我们进行数据的连接,在SQLdeveloper中进行操作,在使用sqldeveloper时需要下载sqldeve

揭秘基于注册表隐藏的无文件攻击

发展 一直以来,文件是恶意代码存在的最常见形式,安全软件也通常把磁盘上的文件作为重点检测对象.然而,一旦恶意代码以无文件形式存储在系统中,便难以对其追踪.早在十几年前,红色代码.Slammer蠕虫就利用缓冲区溢出进行攻击,通过网络传播,完全存在于内存之中,而不以文件作为载体.不过,这种基于内存的无文件(Fileless)攻击一旦进程或系统关闭,也就不复存在.为了实现攻击持久化,攻击者们找到新的突破口--将恶意软件实体隐藏在注册表的某个键值里,并通过各种加密手段,来逃脱安全软件的查杀.最早使用该技

Oracle给普通用户赋予查询动态性能视图的权限

给普通用户赋予查询动态性能视图的权限时,动态性能视图的名字不能像是平常那种写法V$,而是应写成V_$:

Oracle中创建和管理表详解

以下是对Oracle中的创建和管理表进行了详细的分析介绍,需要的朋友可以过来参考下   SQL> /* SQL> 对于表的操作: 创建表,修改表(添加新的列,改变当前某些列,删除列),删除表 SQL> 创建表: create table(需要create table的权限) SQL> 修改表: alter table tablename add/modify/drop SQL> 删除表:drop table tablename SQL> */ SQL> show

Oracle数据库表与视图

oracle|视图|数据|数据库 Oracle数据库数据对象中最基本的是表和视图,其他还有约束.序列.函数.存储过程.包.触发器等.对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数据库对象是学习Oracle的捷径. 表和视图 Oracle中表是数据存储的基本结构.ORACLE8引入了分区表和对象表,ORACLE8i引入了临时表,使表的功能更强大.视图是一个或多个表中数据的逻辑表达式.本文我们将讨论怎样创建和管理简单的表和视图. 管理表 表可以看作有行和列的电子数据表,表是关

SQL 基础-->创建和管理表

--================================= --SQL 基础-->创建和管理表 --=================================   一.创建表:create table     1.语法:CREATE TABLE  [ 用户名. ] 表名          (列名 数据类型 [ default 默认值] [ 约束条件]  [ , ......]  )         TABLESPACE 表空间名       2.表名和列名命名规则:     

SQL 基础11——创建和管理表

一.创建表:create table     1.语法:CREATE TABLE  [ 用户名. ] 表名          (列名 数据类型 [ default 默认值] [ 约束条件]  [ , ......]  )         TABLESPACE 表空间名       2.表名和列名命名规则:        必须以字母开头        必须在1–个字符之间        必须只能包含A–Z, a–z, 0–, _, $, 和#        必须不能和用户定义的其他对象重名    

充分认识 Oracle 数据库表与视图

  Oracle数据库数据对象中最基本的是表和视图,其他还有约束.序列.函数.存储过程.包.触发器等.对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数据库对象是学习Oracle的捷径. 表和视图 Oracle中表是数据存储的基本结构.Oracle8i引入了分区表和对象表,Oracle8i引入了临时表,使表的功能更强大.视图是一个或多个表中数据的逻辑表达式.本文我们将讨论怎样创建和管理简单的表和视图. 管理表 表可以看作有行和列的电子数据表,表是关系数据库中一种拥有数据的结构

Oracle 创建主键自增表示例代码_oracle

前言 本篇文章给大家主要介绍的是在oracle中如果创建自增长表的方法,这里要用到序列.下面话不多说,我们来看示例代码. 示例代码 create table tb_student ( id NUMBER(10) not null, createtime DATE not null, constraint PK_tb_student primary key (id) ); comment on table "tb_student" is '学生表'; comment on column