Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

grant SELECT on TABLE_NAME to READ_USERNAME;

Ответ 2

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

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

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

Ответ 3

Q. Когда требуется опция "с грантом"?

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

Пример:   схема 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

Типичные гранты:   выберите select на 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;

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

Ответ 4

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

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

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

Скажем, user_b хочет создать представление с соединением my_a и yours_b

Для того, чтобы представление работало нормально, user_a должен предоставить "grant select on mine_a to user_b с опцией предоставления"

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

Ответ 5

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

Ответ 6

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

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

предоставить все публике;

Ответ 7

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

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