Как запросить имя таблицы без имени владельца для конкретного пользователя в Oracle

В Oracle19c я создал таблицы с пользователем SYS, так что имя владельца для таблиц - «SYS». А затем я создал нового пользователя и предоставил ему все права. Затем войдите в систему с этим вновь созданным пользователем, запросите

Select * from tblname

но

ORA-00942: таблица или представление не существует

обнаружена ошибка, но можно запросить

Select * from SYS.tblname

Есть ли способ запросить имя таблицы без имени владельца от другого пользователя?


person user8913050    schedule 18.11.2020    source источник


Ответы (1)


Есть ли способ запросить имя таблицы без имени владельца от другого пользователя?

Конечно, есть. Создайте синоним для этой таблицы, частный (который принадлежит вашей схеме) или общедоступный (доступен всем).

Например: подключенный как 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