Получение ORA-01031: недостаточные привилегии при запросе таблицы вместо ORA-00942: таблица или представление не существует

Когда я запрашиваю таблицу в схеме C из схемы A, я получаю ORA-01031: недостаточно привилегий, и когда я запрашиваю одну и ту же таблицу из схемы B, я получение ORA-00942: таблица или представление не существует. На таблице ни одна из схем не имеет никаких привилегий. Почему в этом случае возникают разные сообщения об ошибках?

Ответ 1

Вы можете получить ORA-01031: insufficient privileges вместо ORA-00942: table or view does not exist, если у вас есть хотя бы одна привилегия в таблице, но не необходимая привилегия.

Создание схем

SQL> create user schemaA identified by schemaA;

User created.

SQL> create user schemaB identified by schemaB;

User created.

SQL> create user test_user identified by test_user;

User created.

SQL> grant connect to test_user;

Grant succeeded.

Создание объектов и привилегий

Необычно, но возможно, предоставить схеме такую ​​привилегию, как DELETE, без предоставления SELECT.

SQL> create table schemaA.table1(a number);

Table created.

SQL> create table schemaB.table2(a number);

Table created.

SQL> grant delete on schemaB.table2 to test_user;

Grant succeeded.

Подключиться как TEST_USER и попытаться запросить таблицы

Это показывает, что наличие некоторой привилегии в таблице изменяет сообщение об ошибке.

SQL> select * from schemaA.table1;
select * from schemaA.table1
                      *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> select * from schemaB.table2;
select * from schemaB.table2
                      *
ERROR at line 1:
ORA-01031: insufficient privileges


SQL>

Ответ 2

ORA-01031: insufficient privileges происходит, когда объект существует в схеме, но не имеет никакого доступа к этому объекту.

ORA-00942: table or view does not exist происходит, когда объект не существует в текущей схеме. Если объект существует в другой схеме, вам необходимо получить к нему доступ, используя. Тем не менее вы можете получить недостаточную ошибку привилегий, если владелец не предоставил доступ к вызывающей схеме.

Ответ 3

для ORA-01031: недостаточно прав. Некоторые из наиболее распространенных причин:

  1. Вы пытались изменить имя пользователя или пароль Oracle, не имея соответствующих привилегий.
  2. Вы попытались выполнить UPDATE для таблицы, но у вас есть только SELECT доступ к таблице.
  3. Вы попытались запустить базу данных Oracle, используя CONNECT INTERNAL.
  4. Вы пытались установить базу данных Oracle, не имея соответствующих привилегий для операционной системы.

Варианты решения этой ошибки Oracle:

  1. Вы можете сделать так, чтобы администратор базы данных Oracle предоставил вам соответствующие привилегии, которые вам не хватает.
  2. Вы можете заставить администратора базы данных Oracle выполнить эту операцию за вас.
  3. Если у вас возникли проблемы с запуском Oracle, вам может потребоваться добавить пользователя Oracle в группу dba.

Для ORA-00942: table or view does not exist. Вы попытались выполнить инструкцию SQL, которая ссылается на таблицу или представление, которые либо не существуют, к которым у вас нет доступа, либо которые принадлежат другой схеме, и вы не ссылались на таблицу по имени схемы.

Если эта ошибка произошла из-за того, что таблица или представление не существует, вам нужно будет создать таблицу или представление.

Вы можете проверить, существует ли таблица в Oracle, выполнив следующую инструкцию SQL:

select *
from all_objects
where object_type in ('TABLE','VIEW')
and object_name = 'OBJECT_NAME';

Например, если вы ищете таблицу поставщиков, вы должны выполнить:

select *
from all_objects
where object_type in ('TABLE','VIEW')
and object_name = 'SUPPLIERS';

ВАРИАНТ № 2

Если эта ошибка произошла из-за того, что у вас нет доступа к таблице или представлению, вам потребуется владелец таблицы/представления или администратор БД, который предоставит вам соответствующие привилегии для этого объекта.

ВАРИАНТ № 3

Если эта ошибка произошла из-за того, что таблица/представление принадлежит другой схеме, и вы не указали в таблице имя схемы, вам нужно будет переписать свой SQL, чтобы включить имя схемы.

Например, вы, возможно, выполнили следующую инструкцию SQL:

select *
from suppliers;

Но таблица suppliers не принадлежит вам, а, скорее, принадлежит схеме app, вы можете исправить свой SQL следующим образом:

select *
from app.suppliers;

Если вы не знаете, к какой схеме относится таблица/представление поставщиков, вы можете выполнить следующий SQL-запрос, чтобы узнать:

select owner
from all_objects
where object_type in ('TABLE','VIEW')
and object_name = 'SUPPLIERS';

Это вернет имя схемы, которой принадлежит таблица поставщиков.

Ответ 4

В SQL Developer: все работало нормально, и у меня были все права на вход в систему, пароль не менялся, и я мог щелкнуть таблицу и увидеть вкладку данных.

Но когда я запускал запрос (простой оператор выбора), он показывал сообщение "ORA-01031: недостаточно привилегий".

Решение состоит в том, чтобы просто отключить соединение и восстановить соединение. Примечание: только выполнение Reconnect не работает для меня. Снимок разъединения разработчика SQL

Ответ 5

ORA-01031: недостаточно прав Решение: перейдите к пользователю вашей системы. затем напишите этот код:

SQL> предоставить dba для UserName;//Поместить это имя пользователя, который отображает это сообщение об ошибке.

Грант удался.