如何将视图授权给用户?

flexitime 2005-08-09 09:54:04
在Oracle中建立了两个用户,
UA, UB,
其实UA有TA, TB两个表,及 VC视图,其中 VC视图和了 TA中的FA字段, TB中的FB字段。
现在我想将VC授权给UB,让UB可以读取
在UA下
grant select on vc to ub;
Oracle提示成功。
但当我用UB登录后再 select * from ua.vc的话,就说权限不足。
但可以用语句 desc ua.vc来显示ua.vc的结构。
请问各位大侠,这个如何授权啊?
是不是要将 FA, FB都授权给UB呢?(这样太麻烦了吧?)
还是要将 TA, TB都授权UB?(我是因为不想公开TA和TB给UB才建立VC的)
...全文
4141 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
njhart2003 2005-08-11
  • 打赏
  • 举报
回复
注意with grant option!!!

整试验个过程如下:
SQL> create user ua identified by ua;

用户已创建

SQL> create user ub identified by ub;

用户已创建

SQL> create user uc identified by uc;

用户已创建

SQL> grant connect,resource to ua,ub,uc;

授权成功。

SQL> conn ua/ua@mydb
已连接。
SQL> create table ta(id integer,fa integer);

表已创建。
SQL> begin
2 for x in 1..10 loop
3 insert into ta values(x,x+20);
4 end loop;
5 commit;
6 end;
7 /

PL/SQL 过程已成功完成。

SQL> select * from ta;

ID FA
---------- ----------
1 21
2 22
3 23
4 24
5 25
6 26
7 27
8 28
9 29
10 30

已选择10行。

SQL> conn uc/uc@mydb
已连接。
SQL> create table tb(id integer,fb integer);

表已创建。

SQL> begin
2 for x in 1..10 loop
3 insert into tb values(x,x+60);
4 end loop;
5 commit;
6 end;
7 /

PL/SQL 过程已成功完成。

SQL> select * from tb;

ID FB
---------- ----------
1 61
2 62
3 63
4 64
5 65
6 66
7 67
8 68
9 69
10 70

已选择10行。

SQL> grant select on tb to ua with grant option; -- 注意此处!!!!

授权成功。

SQL> conn ua/ua@mydb
已连接。

SQL> create synonym tb for uc.tb;

同义词已创建。

SQL> create or replace view vc
2 as
3 select ta.id,fa,fb
4 from ta,tb
5 where ta.id=tb.id;

视图已建立。

SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
TA TABLE
TB SYNONYM
VC VIEW

已选择3行。

SQL> grant select on vc to ub;

授权成功。

SQL> conn ub/ub@mydb
已连接。
SQL> select * from ua.vc;

ID FA FB
---------- ---------- ----------
1 21 61
2 22 62
3 23 63
4 24 64
5 25 65
6 26 66
7 27 67
8 28 68
9 29 69
10 30 70

已选择10行。








flexitime 2005-08-11
  • 打赏
  • 举报
回复
我按两位的做法去试了,不行。后来看了一下结构,原来是这样的
原来TB是一个同义词来的。它属于另外一个用户UC的。完整的问题描述如下:

在Oracle中建立了两个用户,
UA, UB, UC
其中UC有TB表,同时 grant select on tb to ua,
其中UA有TA表,TB同义词(synonym UC.TB的) 及 VC 视图,其中 VC视图和了 TA中的FA字段, TB中的FB字段。
现在我想将VC授权给UB,让UB可以读取
在UA下
grant select on vc to ub;
Oracle提示成功。
但当我用UB登录后再 select * from ua.vc的话,就说权限不足。
但可以用语句 desc ua.vc来显示ua.vc的结构。
请问各位大侠,这个如何授权啊?
是不是要将 FA, FB都授权给UB呢?(这样太麻烦了吧?)
还是要将 TA, TB都授权UB?(我是因为不想公开TA和TB给UB才建立VC的)
就算我grant select on ua.tb to uc 结果也是一样。
请问如何解决呢?

分不够,可再加。谢谢
flexitime 2005-08-11
  • 打赏
  • 举报
回复
to: njhart2003()
十分感谢!!!!
请到另外的贴中取分。
http://community.csdn.net/Expert/topic/4203/4203626.xml?temp=.5095636
flexitime 2005-08-11
  • 打赏
  • 举报
回复
to: njhart2003()
十分感谢!!!!
请到另外的贴中取分。
flexitime 2005-08-10
  • 打赏
  • 举报
回复
我用的是9i,我等下重新创建另外的用户试试。十分感谢两位的回答
njhart2003 2005-08-10
  • 打赏
  • 举报
回复
我按照你的描述,做了测试,没有出现你所说的问题,楼主是不是其他地方有问题?

试验过程如下:
SQL> create user ua identified by ua;

用户已创建

SQL> create user ub identified by ub;

用户已创建

SQL> grant connect,resource to ua;

授权成功。

SQL> grant connect,resource to ub;

授权成功。

SQL> conn ua/ua@mydb
已连接。
SQL> create table ta(id integer,fa integer);

表已创建。
SQL> begin
2 for x in 1..10 loop
3 insert into ta values(x,x+20);
4 end loop;
5 commit;
6 end;
7 /

PL/SQL 过程已成功完成。

SQL> select * from ta;

ID FA
---------- ----------
1 21
2 22
3 23
4 24
5 25
6 26
7 27
8 28
9 29
10 30

已选择10行。

SQL> create table tb(id integer,fb integer);

表已创建。

SQL> begin
2 for x in 1..10 loop
3 insert into tb values(x,x+60);
4 end loop;
5 commit;
6 end;
7 /

PL/SQL 过程已成功完成。

SQL> select * from tb;

ID FB
---------- ----------
1 61
2 62
3 63
4 64
5 65
6 66
7 67
8 68
9 69
10 70

已选择10行。
SQL> create view vc as
2 select ta.id,fa,fb from ta,tb
3 where ta.id=tb.id;

视图已建立。

SQL> select * from vc;

ID FA FB
---------- ---------- ----------
1 21 61
2 22 62
3 23 63
4 24 64
5 25 65
6 26 66
7 27 67
8 28 68
9 29 69
10 30 70

已选择10行。

SQL> grant select on vc to ub;

授权成功。

SQL> conn ub/ub@mydb
已连接。
SQL> select * from ua.vc;

ID FA FB
---------- ---------- ----------
1 21 61
2 22 62
3 23 63
4 24 64
5 25 65
6 26 66
7 27 67
8 28 68
9 29 69
10 30 70

已选择10行。




bzszp 2005-08-10
  • 打赏
  • 举报
回复
oracle817下测试没有问题。

SQL> create user temp identified by temp;

用户已创建

已用时间: 00: 00: 00.90
SQL> grant connect to temp;

授权成功。

已用时间: 00: 00: 00.30
SQL> conn scott/tiger
已连接。
SQL> create or replace view vc as
2 select deptno from emp
3 union all
4 select deptno from dept;

视图已建立。

已用时间: 00: 00: 00.31
SQL> grant select on vc to temp;

授权成功。

已用时间: 00: 00: 00.30
SQL> conn temp/temp
已连接。
SQL> desc scott.vc
名称 空? 类型
----------------------------------------- -------- --------------
DEPTNO NUMBER(2)

SQL> select * from scott.vc;

DEPTNO
----------
20
30
30
20
30
30
10
20
10
30
20

DEPTNO
----------
30
20
10
10
20
30
40

已选择18行。

已用时间: 00: 00: 00.80
SQL> select * from scott.dept;
select * from scott.dept
*
ERROR 位于第 1 行:
ORA-00942: 表或视图不存在


已用时间: 00: 00: 00.40
SQL>

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧