Есть ли способ запросить имя таблицы без имени владельца от другого пользователя?
Конечно, есть. Создайте синоним для этой таблицы, частный (который принадлежит вашей схеме) или общедоступный (доступен всем).
Например: подключенный как SCOTT
, я создаю таблицу и предоставляю SELECT
права пользователю MIKE
:
SQL> show user
USER is "SCOTT"
SQL> create table scott_table as
2 select 'Littlefoot' name from dual;
Table created.
SQL> grant select on scott_table to mike;
Grant succeeded.
Подключитесь как MIKE
и попробуйте выбрать из этой таблицы: без указания имени владельца это не сработает:
SQL> connect mike/lion
Connected.
SQL> select * from scott_table;
select * from scott_table
*
ERROR at line 1:
ORA-00942: table or view does not exist
Если я поставлю перед именем таблицы имя владельца, это сработает (но вы хотите избежать этого):
SQL> select * from scott.scott_table;
NAME
----------
Littlefoot
Итак, создаем синоним:
SQL> create synonym scott_table for scott.scott_table;
Synonym created.
SQL> select * from scott_table;
NAME
----------
Littlefoot
SQL>
Однако: то, что вы сделали, - это ОГРОМНАЯ ошибка. Никогда, никогда не связывайся с SYS
пользователем. SYS
особенный. Он владеет базой данных. Предлагается вообще не использовать его - создайте собственного пользователя, который будет выполнять системные задачи, и предоставьте ему роль DBA
. Используйте SYS
только тогда, когда другие пользователи не могут это сделать. Вам действительно следует избегать создания ваших собственных таблиц в SYS
схеме.
Поскольку SYS
является таким особенным, вы можете забыть, что вы подключены как SYS
, сделать что-то, что вы не планировали, и уничтожить свою базу данных.
Поэтому я бы посоветовал вам этого не делать. Создайте эту таблицу в другом месте, в какой-нибудь другой схеме, а затем попробуйте синонимы и прочее.
person
Littlefoot
schedule
18.11.2020