如何从另一个模式中选择Oracle模式特定的视图

时间:2011-01-14 20:48:55

标签: sql oracle view grant

假设我以USERA身份登录,我想访问USERB架构的所有user_ *视图,例如user_tables,user_tab_columns。我怎样才能做到这一点?感谢

3 个答案:

答案 0 :(得分:5)

所有USER_ *表都具有ALL_ *和DBA_ *前缀的类似物。 USER_TABLES包含有关您拥有的所有表的信息。 ALL_TABLES包含有关您有权访问的所有表的信息。 DBA_TABLES包含有关数据库中所有表的信息。

如果您想查看有关UserB表格的信息

SELECT *
  FROM all_tables
 WHERE owner = 'USERB';

SELECT *
  FROM dba_tables
 WHERE owner = 'USERB';

如果您对用户B的表具有SELECT访问权限,前者将起作用。如果您的DBA授予您访问DBA_TABLES视图的权限,后者将起作用。这通常通过授予SELECT ANY DICTIONARY特权(或先前版本中的SELECT_CATALOG_ROLE)来完成,尽管DBA可以授予对各个DBA_ *视图的访问权限。

答案 1 :(得分:2)

  • USER_%次视图会提供您拥有的内容,即您的架构中的内容。
  • ALL_%次观看即可获取您有权访问的内容。

所以你真正应该使用的是ALL_TABLES / etc,并授予对USERB个对象的适当访问权。

答案 2 :(得分:0)

假设您有权限,可以尝试:

ALTER SESSION SET CURRENT_SCHEMA = USERB;