ОРА-01031:недостаточные права при выборе просмотра

StackOverflow https://stackoverflow.com/questions/140643

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

grant SELECT on TABLE_NAME to READ_USERNAME;

Другие советы

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

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

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

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

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

Пример:схема 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 получает Select Count (*) от dsdw.view_name;ОШИБКА в строке 1:ОРА-01031:Недостаточно прав

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

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

теперь ФДР:выберите счетчик (*) из dsdw.view_name;5 рядов

Позвольте мне подвести итог.

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

Пример:User_a является владельцем таблицы под названием mine_a user_b является владельцем таблицы Yours_b

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

Чтобы представление работало нормально, user_a должен предоставить «разрешить выбор на mine_a пользователю_b с опцией предоставления»

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

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

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

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

предоставить все на всеобщее обозрение;

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top