Как System в Sqlplus, как я могу запросить таблицу другого пользователя? - PullRequest
5 голосов
/ 23 сентября 2008

В соответствии с выбранным именем из system_privilege_map Система была предоставлена:

SELECT ANY TABLE

... и множество других * ЛЮБЫХ СТОЛОВ.

Обычный бег

select * from the_table;
select * from the_table;

... выводит данный ответ:

ОШИБКА в строке 1: ORA-00942: таблица или представление не существует

Я могу войти в систему под этим пользователем и просто выполнить ту же команду.

Я работаю в предположении, что я должен быть в состоянии выполнять запросы (выберите в этом случае) против таблицы БД обычного пользователя. Верно ли мое предположение, и если да, то как мне это сделать?

Ответы [ 3 ]

8 голосов
/ 24 октября 2008

Как говорилось в предыдущих ответах, вы можете добавить к имени объекта префикс с именем схемы:

SELECT * FROM schema_name.the_table;

Или вы можете использовать синоним (частный или общедоступный):

CREATE (PUBLIC) SYNONYM the_table FOR schema_name.the_table;

Или вы можете выполнить команду alter session для установки схемы по умолчанию на ту, которую вы хотите:

ALTER SESSION SET current_schema=schema_name;

Обратите внимание, что это просто устанавливает схему по умолчанию и эквивалентно добавлению префикса ко всем (неквалифицированным) именам объектов к schema_name. Вы по-прежнему можете добавлять объекты к другому имени схемы, чтобы получить доступ к объекту из другой схемы. Использование SET current_schema не влияет на ваши привилегии: у вас по-прежнему есть привилегии пользователя, вошедшего в систему, а не заданной вами схемы.

7 голосов
/ 23 сентября 2008

Если the_table принадлежит пользователю "some_user", то:

select * from some_user.the_table;
4 голосов
/ 23 сентября 2008

Вам нужно сделать:

SELECT * FROM schema_name.the_table;

Или используйте синонимы ...

CREATE SYNONYM the_table FOR schema_name.the_table;
...