oracle中怎么在一个用户(B)中查询另一个用户(A)的use_tables表?

相当于怎么把A用户的查询user_tables表的权限给B用户?在B用户中查询A用户的user_tables表。
grant all on A.user_tables to B 会报错,表或试图不存在。

由于user_tables表的特殊性,基于权限的方法目前尚未找到合适方法,不过你可以通过创建视图进行解决
一.第一种方法,在dba 用户下创建基于dba_tables的视图;
1.create view V_A_tables as select * from dba_tables where owner='A';
2.grant select on V_A_tables to B;
3. 进入用户B, select * from sys.V_A_tables ;
二. 第二种方法是在A用户下创建视图并赋权限;
如有疑问,请追问 谢谢追问

没有dba用户权限,进不去,只能用第二种方法,两条语句都成功了,但是查询结果不对,还是当前用户下的表信息,我写不知道对不对,你看下。
A用户下:create view A_user_tables as select * from user_tables;
grant select on A.A_user_tables to B
B用户下:select * from A.A_user_tables

追答

没错,你可以试试看, 附上我测试过的图片

追问

我也是这样试的,但结果却是错了

追答

建议把具体查询结果贴出来,这样是看出问题了,但是不知道具体是哪一块出现问题了

追问

已经解决了,select * from all_all_tables t where t.owner='A'用all_all_tables代替user_tables,不用分权限的。虽然没能帮到多少,但还是谢谢了。你的方法还是给了我很多启发,让我考虑的多了,谢谢!

追答

哦,怎么会不用分权限呢 除非B用户被分配了查看用户A的表信息的权限,呵呵

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-23
user_tables是每个用户独有的
你要实现的话要把A的所有表的查询权限给B , grant select on all tables to B;
然后再all_tables 里面可以查看到
select * from all_tables where owner='B';

all_tables 比user_tables多一个owner字段追问

已经解决了,用all_all_user_tables就可以区分了,不用分权限的。虽然没能帮到多少,但还是谢谢了。

第2个回答  2013-09-23
select * from a.表明 ,这样就行。追问

已经早试过了,这样可以我就不用问了,也会报错的,表或试图不存在…………

追答

grant select on user_tables to b; 在a的用户下面这样写

追问

这样写倒是不报错,但是在B用户下面查询就会报错。也早都试过了。
select * from A.user_tables 会报错,表或试图不存在。
select * from user_tables 这样查出的B用户下的表字典。

相似回答