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





Как владелец таблицы вам необходимо предоставить доступ SELECT к базовым таблицам пользователю, от имени которого вы выполняете оператор SELECT.
grant SELECT on TABLE_NAME to READ_USERNAME;
Если доступ к представлению осуществляется через хранимую процедуру, разрешения на выполнение недостаточно для доступа к представлению. Вы должны предоставить select явно.
Наконец-то я заставил его работать. Ответ Стива правильный, но не во всех случаях. Это не удается, когда это представление выполняется из третьей схемы. Чтобы это работало, вам нужно добавить опцию предоставления:
GRANT SELECT ON [TABLE_NAME] TO [READ_USERNAME] WITH GRANT OPTION;
Таким образом, [READ_USERNAME] может также предоставить привилегию выбора представления другой схеме.
В. Когда требуется «с возможностью предоставления»?
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; предоставить fdr dsdw_select_role;
Но: fdr получает выберите количество (*) из dsdw.view_name; ОШИБКА в строке 1: ORA-01031: недостаточные привилегии
оформить грант:
grant select on fdr.balance to dsdw with grant option;
теперь fdr: выберите количество (*) из dsdw.view_name; 5 рядов
Позвольте мне подвести итоги.
Когда вы создаете представление, содержащее объекты разных владельцев, эти другие владельцы должны предоставить владельцу представления «с опцией предоставления». Таким образом, владелец представления может предоставлять другим пользователям или схемам ....
Пример: User_a - владелец таблицы mine_a User_b - владелец таблицы yours_b
Допустим, user_b хочет создать представление с объединением mine_a и yours_b
Для того, чтобы представление работало нормально, user_a должен дать "предоставить выбор на mine_a пользователю user_b с опцией предоставления"
Затем user_b может предоставить выбор в этом представлении всем.
Если доступ к представлению осуществляется через хранимую процедуру, разрешения на выполнение недостаточно для доступа к представлению. Вы должны предоставить select явно.
просто введите это
предоставить все на публику;
Чтобы использовать представление, пользователь должен иметь соответствующие привилегии, но только для самого представления, а не для его базовых объектов. Однако, если права доступа к базовым объектам представления удалены, пользователь больше не имеет доступа. Это происходит из-за того, что домен безопасности, который используется, когда пользователь запрашивает представление, является доменом, определившим представление. Если привилегии для базовых объектов отозваны у определителя представления, тогда представление становится недействительным, и никто не может использовать представление. Следовательно, даже если пользователю был предоставлен доступ к представлению, он может не иметь возможности использовать представление, если права определяющего были отозваны у базовых объектов представления.
Документация Oracle http://docs.oracle.com/cd/B28359_01/network.111/b28531/authorization.htm#DBSEG98017
вы также можете создать представление с именем схемы например создать или заменить представление schema_name.view_name как select ..
Привет. Пожалуйста, укажите подробности в своем ответе.
Что, если dba предоставит привилегию. Я не получаю эту работу, хотя пользователю dba предоставлены права доступа к созданным представлениям и базовым таблицам.