`
river5566
  • 浏览: 4758 次
  • 性别: Icon_minigender_1
  • 来自: 河南
文章分类
社区版块
存档分类
最新评论

视图与权限(转)

 
阅读更多

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

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

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

  1. SQL> create table t1 as select * from all_objects;   
  2.   
  3. 表已创建。   
  4.   
  5. SQL> grant select on t1 to test2;   
  6.   
  7. 授权成功。  
SQL> create table t1 as select * from all_objects;

表已创建。

SQL> grant select on t1 to test2;

授权成功。

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

  1. SQL> create view v_t1 as select * from test1.t1;   
  2.   
  3. 视图已建立。   
  4.   
  5. SQL> grant select on v_t1 to test3;   
  6.   
  7. 授权成功。  
SQL> create view v_t1 as select * from test1.t1;

视图已建立。

SQL> grant select on v_t1 to test3;

授权成功。

TEST3用户查询视图TEST2.V_T1:

  1. SQL> select * from test2.v_t1 where rownum<1;   
  2. select * from test2.v_t1 where rownum<1   
  3.                     *   
  4. ERROR 位于第 1 行:   
  5. 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执行下面的操作,将解决这个问题:

  1. SQL> grant select on t1 to test2 with grant option;   
  2.   
  3. 授权成功。  
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。

 

转至:http://www.laoxiong.net/view-and-privilege.html

分享到:
评论

相关推荐

    Jenkins创建用户并分配不同视图的权限.md

    Jenkins创建用户并分配不同视图的权限

    Moss视图权限设置

    在Microsoft Office SharePoint Server (MOSS) 中,视图权限设置是一项关键功能,它允许管理员精细控制用户对列表、库和网站中数据的访问。通过这种权限管理,组织能够确保信息的安全性和合规性,同时提高协作效率。...

    MSSQL用户表、视图、存储过程转SQL

    确保在新环境中正确设置权限,以便用户表、视图和存储过程能够正常工作。同时,如果你在迁移过程中涉及数据,记得也要考虑数据迁移的策略,如是否需要完全复制数据,或者只保留结构。 总之,将MSSQL的用户表、视图...

    oracle 视图权限 oracle 创建视图权限不足

    当你尝试在特定用户下创建视图时,如果出现“权限不足”的错误,这通常意味着该用户没有足够的权限执行`CREATE VIEW`操作。在本例中,问题出现在`scott`用户试图创建视图时,由于权限限制导致失败。 首先,我们需要...

    如何创建视图授权

    如何创建视图授权

    oracle查看用户、权限、角色的命令和视图

    对象权限与特定的数据库对象(如表、视图)相关,以下视图可用于查看这些权限: - `DBA_TAB_PRIVS`:显示所有用户对所有表的权限。 - `ALL_TAB_PRIVS`:显示当前用户可以看到的所有表的权限。 - `USER_TAB_PRIVS`:...

    实验四视图、数据控制与嵌入式SQL语言实验

    实验四主要涵盖三个主题:视图定义与查询、数据控制以及嵌入式SQL语言实验,所有操作都在SQL Server 2000查询分析器中进行,基于“图书读者数据库”(Book_Reader_DB)和实验二输入的数据。 1、视图定义与查询: -...

    C# 实现oracle数据库视图的迁移

    5. **处理权限和依赖关系**:如果视图有相关的权限或依赖其他对象,需要在目标数据库上重新设置这些权限和确保依赖对象的存在。 6. **关闭数据库连接**:完成迁移后,记得关闭源数据库和目标数据库的连接,以释放...

    实验四 视图、数据控制

    此外,还需要使用SQL语句手动创建两个视图View3和View4,其中View3与View1相同,而View4与View2条件相同。 ##### 2. 数据控制实验 **权限管理**:通过SQL Server的数据控制功能进行权限分配和回收。 - **分配权限*...

    sql视图复制工具

    4. **权限复制**:视图通常有特定的访问控制,工具也会复制源视图的权限设置,如GRANT和REVOKE语句,确保目标视图的安全性与源视图一致。 5. **错误处理和日志记录**:在复制过程中,可能会遇到各种问题,如语法...

    数据库实验报告 视图的定义及使用实验(详细版有截图的)

    2. 使用`DROP VIEW`语句删除已创建的视图,其语法为`DROP VIEW 视图名`,这将永久移除视图及其相关的权限。 3. `SELECT`命令可以用于查询视图,其语法与查询基本表相同。 4. `UPDATE`, `INSERT`, `DELETE`等命令...

    SQL练习与答案3 视图与子查询

    3. **权限管理**:通过视图,数据库管理员可以限制用户访问特定的数据子集,而无需给他们对原始表的直接访问权限。 4. **数据导出**:视图简化了数据导出过程,用户可以直接从视图中提取所需的数据。 现在,我们来...

    安卓天气日历时间选择倒计时相关-可以在月视图与周视图之间切换的calendar控件.rar

    本资源提供的"可以在月视图与周视图之间切换的calendar控件"旨在帮助开发者实现更加灵活和交互友好的日历功能。 1. 日历控件的基本概念: 日历控件(Calendar View)是Android SDK提供的一种用户界面组件,用于展示...

    oracle表字段或是视图字段添加备注方法

    添加备注信息到表字段的方法与添加备注信息到表相同。我们可以使用以下语句: ```sql comment on column XXXX.YYYY is 'XXXX'; ``` 其中,XXXX 是表名,YYYY 是字段名,'XXXX' 是备注信息。 示例 以下是一个示例...

    sql server视图详解

    ### 视图的修改与删除 要修改已存在的视图,可以使用ALTER VIEW语句;要删除视图,使用DROP VIEW语句。 ### 总结 SQL Server中的视图是数据库设计的重要工具,它提供了数据抽象、安全性、易用性等多种功能。通过...

    clearcase视图建立步骤

    本文将详细讲解如何在ClearCase中建立视图,这是一项基础但至关重要的操作,尤其对初学者而言。 首先,我们要理解视图在ClearCase中的意义。视图是ClearCase提供的一种机制,它允许开发者在一个定制化的环境中工作...

    17oracle的视图 PPT

    2. 安全性与权限控制:通过视图,数据库管理员可以限制用户对原始数据的访问。用户只能看到和操作视图所允许的部分,而不能直接访问基础表的所有内容。这在保护敏感数据和实现不同级别的访问权限方面非常有用。 3. ...

    oracle创建视图课件

    这使得视图成为数据抽象和权限控制的有效工具。 在Oracle数据库中,创建视图主要涉及以下知识点: 1. **视图定义**:视图是由SELECT语句组成的逻辑表,不包含任何实际数据,仅保存查询语句的定义。用户可以通过...

    ORACLE数据字典与视图

    ### ORACLE 数据字典与视图详解 #### 一、概述 Oracle 数据库是一个功能强大的关系型数据库管理系统,其中的数据字典与视图是管理数据库的重要组成部分。数据字典是数据库内部用来存储元数据(即关于数据的数据)的...

Global site tag (gtag.js) - Google Analytics