Невозможно создать Oracle View для доступа к объектам других схем, несмотря на предоставление - PullRequest
1 голос
/ 17 мая 2019

У меня есть 2 схемы:

ARIEL ARIEL_APEX

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

Например,

SELECT * FROM ARIEL.DIM_REGISTRATION_SET

отлично работает из схемы ARIEL_APEX.

Когда я пытаюсь создать представление в ARIEL_APEX:

CREATE VIEW TEST_VIEW AS
SELECT * FROM ARIEL.DIM_REGISTRATION_SET

Я понял:

Error at Command Line : 465 Column : 23
Error report -
SQL Error: ORA-01031: insufficient privileges
01031. 00000 -  "insufficient privileges"
*Cause:    An attempt was made to change the current username or password
           without the appropriate privilege. This error also occurs if
           attempting to install a database without the necessary operating
           system privileges.
           When Trusted Oracle is configure in DBMS MAC, this error may occur
           if the user was granted the necessary privilege at a higher label
           than the current login.
*Action:   Ask the database administrator to perform the operation or grant
           the required privileges.
           For Trusted Oracle users getting this error although granted the
           the appropriate privilege at a higher label, ask the database
           administrator to regrant the privilege at the appropriate label.

Это отлично работает в тестовой и производственной среде, это разработка. DBA говорит, что все хорошо в их конце.

ARIEL_APEX having below privileges.

GRANTEE                        PRIVILEGE
------------------------------ ----------------------------------------
ARIEL_APEX                     CREATE JOB
ARIEL_APEX                     CREATE MATERIALIZED VIEW
ARIEL_APEX                     CREATE TABLE
ARIEL_APEX                     CREATE OPERATOR
ARIEL_APEX                     CREATE VIEW
ARIEL_APEX                     CREATE TYPE
ARIEL_APEX                     CREATE SYNONYM
ARIEL_APEX                     CREATE CLUSTER
ARIEL_APEX                     CREATE DIMENSION
ARIEL_APEX                     CREATE TRIGGER
ARIEL_APEX                     CREATE SESSION
ARIEL_APEX                     CREATE INDEXTYPE
ARIEL_APEX                     CREATE PROCEDURE
ARIEL_APEX                     CREATE SEQUENCE

И мы знаем, что разрешения ARIEL_APEX для объектов ARIEL в порядке, поскольку мы можем выполнить запрос вручную.

Это Oracle 12. Никогда не было проблемы до того, как мы обновили ее, но подозреваю, что это связано с доступом к объектам из другой схемы в представлении.

ARIEL_APEX является членом элемента ANALYTICS_ROLE, который предоставляет выбор ANALYTICS_ROLE для всех таблиц в схеме ARIEL, что, как видно, работает ниже.

The grant is provided to the ANALYTICS_ROLE which grants SELECT access on all ARIEL tables.

The grants work, as can be seen by the direct execution of a query from the ARIEL_APEX schema of an ARIEL table. Error when trying to create a view around the working query.

1 Ответ

2 голосов
/ 17 мая 2019

Работает в верхних средах, единственное отличие - это гранты, предоставляемые ролью ... в других средах Гранты SELECT предоставляются непосредственно для объектов.

Как отмечено в документации (выделение добавлено):

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

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

Я полагаю, это связано с тем, как работают роли. Благодаря прямому предоставлению Oracle знает, можете ли вы увидеть таблицу в другой схеме. Если вы предоставляете select в вашем представлении кому-то еще, тогда, когда они запрашивают представление, Oracle знает, что цепочка привилегий существует. Если ваше прямое предоставление в таблице отменено, то существуют механизмы для аннулирования зависимых объектов. Но что должно произойти, привилегия выбора роли в таблице отменяется; или ваш доступ к роли аннулирован; или только в пределах вашей собственной сессии, что должно произойти, если вы отключите эту роль - вы все еще можете получить доступ к представлению? Это немного сложнее, чем кажется на первый взгляд.

К счастью, создание представлений должно быть относительно редким и контролируемым. Большинству людей, получающих доступ к таблице через роль, не нужно создавать представление о ней (я полагаю!).

Другой вариант - создать представление в схеме ARIEL, а затем предоставить права доступа APEX_ARIEL и / или роли. Уместно ли это, зависит от вашего реального запроса к представлению и вашей мотивации для создания представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...