Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1148863
  • 博文数量: 231
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-03 16:35
个人简介

学无止境

文章分类

全部博文(231)

文章存档

2014年(7)

2013年(103)

2011年(11)

2010年(53)

2009年(57)

分类: Oracle

2010-08-20 17:54:12


在创建视图时,假设有a、b、c 3个用户,其中a用户下有1张表,b用户下建立1个视图,基于a用户下的表,此时b用户需要对a用户的这张表具有select权限。
c用户需要查询b用户下的这张视图,c用户不但需要具有这张视图的select权限,还需要b用户可以将a用户下的表的select权限级联赋给c用户的权限,即得到a用户授权时具有with grant option。


1.创建3个用户,分别为a,b,c,默认表空间为ldy,只有用户a具有配额,3个用户均有connect角色。

SQL> create user a identified by a default tablespace ldy;

用户已创建。

SQL> create user b identified by b default tablespace ldy;

用户已创建。

SQL> create user c identified by c default tablespace ldy;

用户已创建。

SQL> grant connect to a;

授权成功。

SQL> grant connect to b;

授权成功。

SQL> grant connect to c;

授权成功。

SQL> alter user a quota 10m on ldy;

用户已更改。

SQL> grant create table to a;

授权成功。

SQL> grant create view to b;

授权成功。


2.用a用户建立表a,插入4条数据。

SQL> conn a/a
已连接。
SQL> create table a (id number(10),name varchar2(10));

表已创建。

SQL> insert into a values (1,'a');

已创建 1 行。

SQL> insert into a values (2,'b');

已创建 1 行。

SQL> insert into a values (3,'c');

已创建 1 行。

SQL> insert into a values (4,'d');

已创建 1 行。

SQL> commit;

提交完成。


3.将a表的select授权给用户b。

SQL> grant select on a to b;

授权成功。

SQL> conn b/b
已连接。
SQL> select * from a.a;

        ID NAME
---------- ----------
         1 a
         2 b
         3 c
         4 d


4.在b用户下建立一个基于a.a表的视图。

SQL> create view a_view as select * from a.a where id>2;

视图已创建。

SQL> select * from a_view;

        ID NAME
---------- ----------
         3 c
         4 d


5.将这个视图授权给用户c时,出现问题,这是由于b表无法将a.a表的权限授予别人。

SQL> grant select on a_view to c;
grant select on a_view to c
                *
第 1 行出现错误:
ORA-01720: 不存在 'A.A' 的授权选项

 

6.在a用户下重新授权,加上with grant option,使得可以级联授权。

SQL> conn a/a
已连接。
SQL> grant select on a to b with grant option;

授权成功。


7.重新授权b用户下的视图给c用户。

SQL> conn b/b
已连接。
SQL> grant select on a_view to c;

授权成功。

 

8.c用户可以查询b用户的视图

SQL> conn c/c
已连接。
SQL> select * from b.a_view;

        ID NAME
---------- ----------
         3 c
         4 d

 

9.在a用户下重新对b用户授权,使得b用户不能级联授权,b用户下的视图的select权限通过sysdba用户授权给c。

SQL> conn a/a
已连接。
SQL> revoke select on a from b;

撤销成功。

SQL> grant select on a.a to b;

授权成功。


10.c用户查询时,报权限不足的错误。

SQL> conn c/c
已连接。
SQL> select * from b.a_view;
select * from b.a_view
                *
第 1 行出现错误:
ORA-01031: 权限不足


11.在a用户下,将表的select权限授予c,再登陆c用户,c用户仍然不能查询b用户下的视图。

SQL> conn a/a
已连接。
SQL> grant select on a to c;

授权成功。

SQL> conn c/c
已连接。
SQL> select * from b.a_view;
select * from b.a_view
                *
第 1 行出现错误:
ORA-01031: 权限不足

阅读(5694) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~