ORA-01031: недостаточные привилегии при выборе представления

Когда я пытаюсь выполнить представление, которое включает таблицы из разных схем, возникает ошибка ORA-001031 Недостаточно привилегий. Эти таблицы имеют разрешение на выполнение для схемы, в которой было создано представление. Если я выполню SQL-запрос представления, оно работает. Что я упускаю?

Наконец-то я заставил его работать. Ответ Стива правильный, но не для всех случаев. Он не работает, когда представление выполняется из третьей схемы. Чтобы это работало, нужно добавить опцию grant:

GRANT SELECT ON [TABLE_NAME] TO [READ_USERNAME] WITH GRANT OPTION;

Таким образом, [READ_USERNAME] может также предоставить привилегию select над представлением другой схеме

Комментарии (2)
Решение

Как владелец таблицы, вы должны предоставить доступ SELECT к базовым таблицам пользователю, от имени которого вы выполняете оператор SELECT.

grant SELECT on TABLE_NAME to READ_USERNAME;
Комментарии (0)

В. Когда требуется «с грантом» ?

A. когда у вас есть представление, выполненное из третьей схемы.

Пример: Схема DSDSW имеет представление с именем view_name

a) that view selects from a table in another schema  (FDR.balance)
b) a third shema  X_WORK  tries to select  from that view

Типичные гранты: предоставить выбор на dsdw.view_name для dsdw_select_role ; предоставить dsdw_select_role для fdr ;

Но: FDR получает выберите count (*) из dsdw.view_name ; ОШИБКА на линии 1: ORA-01031: недостаточные привилегии

выдать грант:

grant select on fdr.balance to dsdw with grant option;

теперь фдр: выберите count (*) из dsdw.view_name ; 5 строк

Комментарии (0)

Позвольте мне сделать резюме.

Когда вы создаете представление, содержащее объект разных владельцев, эти другие владельцы должны предоставить «с опционом гранта» владельцу представления. Таким образом, владелец представления может предоставить другим пользователям или схемам....

Пример: User_a является владельцем таблицы mine_a User_b является владельцем таблицы с именем your_b

Допустим, user_b хочет создать представление с объединением mine_a и your_b

Чтобы представление работало нормально, user_a должен указать «выбор гранта на mine_a для user_b с опцией гранта»

Тогда user_b может предоставить выбор в этом представлении всем.

Комментарии (0)

Если доступ к представлению осуществляется с помощью хранимой процедуры, грант выполнения недостаточен для доступа к представлению. Вы должны предоставить выбор явно.

просто введите это

предоставить все на < TBL NAME > публике;

Комментарии (0)

Если доступ к представлению осуществляется через хранимую процедуру, разрешения execute недостаточно для доступа к представлению. Вы должны явно предоставить право select.

Комментарии (0)

Чтобы использовать представление, пользователь должен иметь соответствующие привилегии, но только для самого представления, а не для его базовых объектов. Однако, если привилегии доступа для базовых объектов представления удалены, пользователь больше не имеет доступа. Такое поведение возникает потому, что домен безопасности, который используется, когда пользователь запрашивает представление, является областью определения представления. Если привилегии на базовых объектах отменяются из определителя представления, то представление становится недействительным, и никто не может использовать представление. Следовательно, даже если пользователю предоставлен доступ к представлению, пользователь может не иметь возможности использовать представление, если права определителя были отменены из базовых объектов представления.

Документация Oracle http://docs.oracle.com/cd/B28359_01/network.111/b28531/authorization.htm#DBSEG98017

Комментарии (0)