как выбрать специфичное для схемы Oracle представление из другой схемы - PullRequest
2 голосов
/ 14 января 2011

Предположим, я вошел как USERA, я хочу получить доступ ко всем представлениям user_ * схемы USERB, таким как user_tables, user_tab_columns. Как я могу это сделать? Спасибо

Ответы [ 3 ]

5 голосов
/ 14 января 2011

Все таблицы USER_ * имеют аналоги с префиксом ALL_ * и DBA_ *. USER_TABLES содержит информацию обо всех ваших таблицах. ALL_TABLES содержит информацию обо всех таблицах, к которым у вас есть доступ. DBA_TABLES содержит информацию обо всех таблицах в вашей базе данных.

Если вы хотите увидеть информацию о таблицах UserB

SELECT *
  FROM all_tables
 WHERE owner = 'USERB';

или

SELECT *
  FROM dba_tables
 WHERE owner = 'USERB';

Первый вариант будет работать, если у вас есть доступ SELECT к таблицам пользователя B. Последний будет работать, если ваш администратор БД предоставил вам доступ к представлению DBA_TABLES. Обычно это делается путем предоставления привилегии SELECT ANY DICTIONARY (или SELECT_CATALOG_ROLE в предыдущей версии), хотя администратор базы данных может предоставлять доступ к отдельным представлениям DBA_ *.

2 голосов
/ 14 января 2011
  • USER_% представления дают то, что у вас есть, то есть то, что находится внутри вашей схемы.
  • ALL_% представления дают то, к чему у вас есть доступ.

Так чтовам действительно следует использовать ALL_TABLES / etc и предоставить соответствующий доступ к USERB объектам.

0 голосов
/ 15 января 2011

Если у вас есть разрешения, вы можете попробовать:

ALTER SESSION SET CURRENT_SCHEMA = USERB;

...