Дополнительно
ORA-01031: недостаточные привилегии при выборе представления
Когда я пытаюсь выполнить представление, которое включает таблицы из разных схем, возникает ошибка ORA-001031 Недостаточно привилегий. Эти таблицы имеют разрешение на выполнение для схемы, в которой было создано представление. Если я выполню SQL-запрос представления, оно работает. Что я упускаю?
29
7
Наконец-то я заставил его работать. Ответ Стива правильный, но не для всех случаев. Он не работает, когда представление выполняется из третьей схемы. Чтобы это работало, нужно добавить опцию grant:
Таким образом,
[READ_USERNAME]
может также предоставить привилегию select над представлением другой схемеКак владелец таблицы, вы должны предоставить доступ SELECT к базовым таблицам пользователю, от имени которого вы выполняете оператор SELECT.
В. Когда требуется «с грантом» ?
A. когда у вас есть представление, выполненное из третьей схемы.
Пример: Схема DSDSW имеет представление с именем view_name
Типичные гранты: предоставить выбор на dsdw.view_name для dsdw_select_role ; предоставить dsdw_select_role для fdr ;
Но: FDR получает выберите count (*) из dsdw.view_name ; ОШИБКА на линии 1: ORA-01031: недостаточные привилегии
выдать грант:
теперь фдр: выберите count (*) из dsdw.view_name ; 5 строк
Позвольте мне сделать резюме.
Когда вы создаете представление, содержащее объект разных владельцев, эти другие владельцы должны предоставить «с опционом гранта» владельцу представления. Таким образом, владелец представления может предоставить другим пользователям или схемам....
Пример: User_a является владельцем таблицы mine_a User_b является владельцем таблицы с именем your_b
Допустим, user_b хочет создать представление с объединением mine_a и your_b
Чтобы представление работало нормально, user_a должен указать «выбор гранта на mine_a для user_b с опцией гранта»
Тогда user_b может предоставить выбор в этом представлении всем.
Если доступ к представлению осуществляется с помощью хранимой процедуры, грант выполнения недостаточен для доступа к представлению. Вы должны предоставить выбор явно.
просто введите это
предоставить все на < TBL NAME > публике;
Если доступ к представлению осуществляется через хранимую процедуру, разрешения execute недостаточно для доступа к представлению. Вы должны явно предоставить право select.
Чтобы использовать представление, пользователь должен иметь соответствующие привилегии, но только для самого представления, а не для его базовых объектов. Однако, если привилегии доступа для базовых объектов представления удалены, пользователь больше не имеет доступа. Такое поведение возникает потому, что домен безопасности, который используется, когда пользователь запрашивает представление, является областью определения представления. Если привилегии на базовых объектах отменяются из определителя представления, то представление становится недействительным, и никто не может использовать представление. Следовательно, даже если пользователю предоставлен доступ к представлению, пользователь может не иметь возможности использовать представление, если права определителя были отменены из базовых объектов представления.
Документация Oracle http://docs.oracle.com/cd/B28359_01/network.111/b28531/authorization.htm#DBSEG98017