Когда я запрашиваю таблицу в схеме C из схемы A, я получаю ORA-01031: недостаточно привилегий, и когда я запрашиваю одну и ту же таблицу из схемы B, я получение ORA-00942: таблица или представление не существует. На таблице ни одна из схем не имеет никаких привилегий. Почему в этом случае возникают разные сообщения об ошибках?
Получение ORA-01031: недостаточные привилегии при запросе таблицы вместо 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: недостаточно прав. Некоторые из наиболее распространенных причин:
- Вы пытались изменить имя пользователя или пароль Oracle, не имея соответствующих привилегий.
- Вы попытались выполнить
UPDATE
для таблицы, но у вас есть толькоSELECT
доступ к таблице. - Вы попытались запустить базу данных Oracle, используя
CONNECT INTERNAL
. - Вы пытались установить базу данных Oracle, не имея соответствующих привилегий для операционной системы.
Варианты решения этой ошибки Oracle:
- Вы можете сделать так, чтобы администратор базы данных Oracle предоставил вам соответствующие привилегии, которые вам не хватает.
- Вы можете заставить администратора базы данных Oracle выполнить эту операцию за вас.
- Если у вас возникли проблемы с запуском 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;//Поместить это имя пользователя, который отображает это сообщение об ошибке.
Грант удался.