精华内容
下载资源
问答
  • Oracle数据库视图与权限问题

    千次阅读 2014-08-21 11:45:28
    前几天客户遇上这样一个问题,某个用户A将视图的SELECT给予另一个用户B,但是用户B查询这个视图时,仍然报错:ORA-01031: 权限不足。这是怎么一回事呢?下面来模拟一下这个过程:  有三个用户test1,test2,test3,...

    http://tech.it168.com/a2009/1116/809/000000809691.shtml

    前几天客户遇上这样一个问题,某个用户A将视图的SELECT给予另一个用户B,但是用户B查询这个视图时,仍然报错:ORA-01031: 权限不足。这是怎么一回事呢?下面来模拟一下这个过程:

      有三个用户test1,test2,test3, 三个用户都具有DBA色色权限。

      用TEST1用户创建一个表T1,并将其查询权限授予TEST2: 

    SQL> create table t1 as select * from all_objects;

      表已创建。

      SQL
    > grant select on t1 to test2;

      授权成功。

      SQL
    > create table t1 as select * from all_objects;

      表已创建。

      SQL
    > grant select on t1 to test2;

      授权成功。

      用TEST2用户创建一个视图,视图的基表是TEST1.T1,并将查询权限授予TEST3:

     SQL> create view v_t1 as select * from test1.t1;

      视图已建立。

      SQL
    > grant select on v_t1 to test3;

      授权成功。

      SQL
    > create view v_t1 as select * from test1.t1;

      视图已建立。

      SQL
    > grant select on v_t1 to test3;

      授权成功。

      TEST3用户查询视图TEST2.V_T1:

    SQL> select * from test2.v_t1 where rownum<1;

      
    select * from test2.v_t1 where rownum<1

      
    *

      ERROR 位于第 
    1 行:

      ORA
    -01031: 权限不足

      SQL
    > select * from test2.v_t1 where rownum<1;

      
    select * from test2.v_t1 where rownum<1

      
    *

      ERROR 位于第 
    1 行:

      ORA
    -01031: 权限不足

      可以看到报了权限不足的错误,就算这里TEST3用户有DBA权限。

      这到底是怎么回事呢?

      其实视图的权限,有两点需要引起注意:

      1. 视图中,类似于定义者权限的存储过程,是屏蔽了角色权限的。比如如果TEST1没有显式地将T1表的SELECT权限给予TEST2,那么TEST2在创建视图V_T1时也会报ORA-01031错误,即使TEST2用户拥有DBA角色权限。

      2.如果在用户A的视图中,引用了其他用户B的表,用户A将视图的访问权限给予用户C,那么就变相地将用户B的表的访问权限给予了用户C,因此,用户A必须有将用户B的表的访问权限转授用户C的权限,也就是用户B在授予A权限时,必须使用with grant option。

      显然这里正是由于第2点的原因,导致用户TEST3不能访问视图。用户TEST1执行下面的操作,将解决这个问题: 

    SQL> grant select on t1 to test2 with grant option;

      授权成功。

      SQL
    > grant select on t1 to test2 with grant option;

      授权成功。

      对于视图的UPDATE,DELETE权限,同样是如此。

      在测试时,有一个现象,有点意思。就是如果用户TEST2没有显式地把V_T1的SELECT权限授予TEST3,而TEST3在有SELECT ANY TABLE或DBA权限时,则查询这个视图时不会报权限不足的错误。由于有SELECT ANY TABLE权限的存在,所有的用户表都可以被访问。但是显式授予表的权限时,似乎表的权限有更高的优先级,并且没有跟系统权限和角色权限进行结合。或者版本不同,表现得不一样,在我的测试中,是Oracle 9.2.0.8 for Windows。


    展开全文
  • 当我们使用Oracle数据库用户user1的时候, 我们想要访问只有在用户user2里才有的表t_emp,我们通常的语句是:select t.ename, t.deptno from user2.t_emp t;如果我们直接写:select t.ename, t.deptno from t_emp t;这...

    当我们使用Oracle数据库用户user1的时候, 我们想要访问只有在用户user2里才有的表t_emp,

    我们通常的语句是:

    select t.ename, t.deptno from user2.t_emp t;

    如果我们直接写:

    select t.ename, t.deptno from t_emp t;

    这时候就会报错: 表或视图不存在!

    那我们可不可以直接写这样的语句呢?

    答案是可以的. 利用同义词就可以做到这一点.

    同义词的好处就是可以利用一个名词(可以理解为某个对象的代号)来访问某个特定的数据库对象

    那首先我们先要创建同义词.

    create public synonym table_name for user.table_name;

    create public synonym t_emp form user2.t_emp;

    然后你在使用

    select t.ename, t.deptno from t_emp t;

    查询就能得到你想要的结果了.

    删除同义词:

    drop public synonym table_name;

    查看同义词:

    select * from dba_synonyms

    展开全文
  • ORACLE 创建视图时,提示用户权限不足 ...问题:使用scott登录Oracle以后,创建视图,提示“权限不够”,怎么解决? 回答: 这是因为scott这个帐户目前没有创建视图的权限。解决方法为: 首...
    转载:https://blog.csdn.net/zq9017197/article/details/22040093
    

    ORACLE 创建视图时,提示用户权限不足

    问题:使用scott登录Oracle以后,创建视图,提示“权限不够”,怎么解决?
    回答:
    这是因为scott这个帐户目前没有创建视图的权限。解决方法为:
    首先使用system帐户进行登录,其中“tigertiger”为安装Oracle时所指定的密码(可修改):
    sqlplus system/tigertiger
    然后执行:
    grant create any view to scott
    提示:授权成功。
    执行:
    exit
    退出当前system帐户。

    再使用sqlplus登录就可以创建视图了,如:
    sqlplus scott/tigert
    下面创建一个最简单视图:
    create or replace view v1
    as
    select * from t1;

     

    附录:如果以上方法不能解决您的问题,可以尝试以下方法。 反正我的问题是解决了,记录下来。害我找大半天;

     

    描述:

    同一个数据库:DB1

    两个自定义用户:分别为 USER1、USER2

    在USER1创建视图,其中试图内包含USER2中的表。 提示“权限不足”

    执行以下SQL,根据自己用户不同需修改使用:

    –为USER1授权

    GRANT CREATE ANY TABLE TO USER1;
    GRANT SELECT ANY TABLE TO USER1;
    GRANT COMMENT ANY TABLE TO USER1;
    GRANT LOCK ANY TABLE TO USER1;
    GRANT SELECT ANY DICTIONARY TO USER1;

     

    –为USER2授权

    GRANT CREATE ANY TABLE TO USER2;
    GRANT SELECT ANY TABLE TO USER2;
    GRANT COMMENT ANY TABLE TO USER2;
    GRANT LOCK ANY TABLE TO USER2;
    GRANT SELECT ANY DICTIONARY TO USER2;

    本人实测:
    1.使用system帐户进行登录,授权
    这里写图片描述
    2.登录Oracle数据库的普通用户scott,新建视图v_emp
    这里写图片描述
    3.查询视图v_emp的数据
    这里写图片描述

    展开全文
  • Oracle数据库多表创建视图是不能直接进行视图添加等更新。今天和大家分享的是Oracle多表创建视图insert的实际操作,  解决办法:替代触发器。说道这,大家可能就都知道怎么做了。  create or replace ...

    单表创建的相关视图在实际的操作中,可以对其进行增、删与改。Oracle数据库多表创建的视图是不能直接进行视图添加等更新。今天和大家分享的是Oracle多表创建的视图insert的实际操作,

      解决办法:替代触发器。说道这,大家可能就都知道怎么做了。

      create or replace trigger 名称

      1.Instead Of Insert or update or delete

      on 视图

      1.for each row

      2.Declare

      3.begin

      4.If Inserting Then

      Insert Into 基本表1 (t11,t12) Values (:New.f1,:New.f2);

      Insert Into 基本表2 (t11,t22) Values (:New.f1,:New.f3);

      1.elsif Updating Then

      Update 基本表1 set t11=:New.f1,t12=:New.f2 where t11=:New.f1;

      Update 基本表2 set t11=:New.f1,t22=:New.f3 where t11=:New.f1;

      1.elsif Deleting then

      Delete from 基本表1 where t11=:Old.f1;

      Delete from 基本表2 where t11=:Old.f1;

      上述的相关内容就是对Oracle多表创建的视图insert的描述,希望会给你带来一些帮助在此方面。

    原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/database/434/12377934.shtml

    转载于:https://www.cnblogs.com/ademen/p/3551837.html

    展开全文
  • 场景: 测试环境迁移后,一个服务报错,最终查找到问题是-往操作记录...看了了视图创建者,是service,最终重新拉视图,变成root就好了。 原因: 旧环境:service:读写账号,创建视图 新环境:root:读写权限,s
  • ![图片说明](https://img-ask.csdn.net/upload/201905/30/1559215621_413004.png) 数据库初学者,老师留的题做不出来。。。 主要是表不知道该怎么建,有表的话也好说很多。。。 求大神帮帮忙!!!
  • 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...
  • 问题描述:如果我有数据库A和数据库B,数据库A和B属于同一个库,是否可以在MySQL中创建B数据库下的视图test,对应数据库A下的a表。我该怎么做。 解决方案:创建视图的语句为: CREATE VIEW b.test AS SELECT * ...
  • 现在因为业务需要肯定要用到视图,查了网上资料终于是把视图能作为实体取出来了,但是发现在新库上第一次启动程序,视图实体他还是当成表对象来创建了,想知道怎么样能够自动创建视图 VUserMenu.java ``` /** ...
  • 创建视图:create or replace force view view_ownersasselect * from T_OWNERS删除视图语法:drop view view_owners创建视图 :业主类型为 1 的业主信息create or replace view view_ownersasselect * from t_...
  • 关于SQL视图创建和使用方法

    千次阅读 2013-12-30 09:34:27
    SQL视图创建和使用 视图这个东西在其他的软件中,我们也经常看得到,例如word中就有视图,我们不难发现,视图似乎是一种显示方式,就像WORD一样,有几种显示版面,这就是视图,那么SQL中的视图又该怎么定义呢?...
  • SQL视图创建和使用

    2017-09-14 00:35:21
    SQL视图创建和使用 视图这个东西在其他的软件中,我们也经常看得到,例如word中就有视图,我们不难发现,视图似乎是一种显示方式,就像WORD一样,有几种显示版面,这就是视图,那么SQL中的视图又该怎么定义呢?...
  • 表是可以的,但是视图不可以
  • 它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。2、什么...
  • 1.2 怎么创建视图?怎么删除视图? create view myview as select empno,ename from emp; drop view myview; 注意:只有DQL语句才能以视图对象的方式创建出来。 1.3 对视图进行增删改查,会影响原表数据(通过视图...
  • 本来只是想解决怎么把数据的行和列...第一部分主要的操作包含:数据库创建、删除,表的增、删、改,表中数据的增、删、改、查,视图的操作。 1 --查询数据库是否存在 2 if exists ( select * from sysdatabas...
  • System.Data.EntityCommandCompilationException HResult=0x8013193B Message=准备命令定义时出错。有关详细信息,请参阅内部...InvalidOperationException: 视图内容或 EntitySet 基名称已更改为与设计时不同。
  • Oracle数据库多表创建视图是不能直接进行视图添加等更新。解决办法:替代触发器。说道这,大家可能就都知道怎么做了。create or replace trigger 名称InsteadOfInsertorupdateordeleteon 视...
  • 对于基于视图创建的odoo模型,我们在创建数据库视图时需要给一个唯一性标识(ID)。 这个时候就需要确定ID怎么取值: 对于以某一个表作为主表查询结果创建为视图,或者可以找到一个唯一性标识的, 这种情况下,以主...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 227
精华内容 90
关键字:

数据库视图怎么创建