Oracle: Предоставить выбор при просмотре - PullRequest
1 голос
/ 12 февраля 2020

Я пытаюсь выполнить операцию выбора для представления, которое содержит несколько таблиц следующим образом

SELECT count(1) FROM ABC_DEF.MY_VIEW;

Представление:

SELECT TEXT FROM DBA_VIEWS where OWNER = 'ABC_DEF' and VIEW_NAME  = 'MY_VIEW' ;

Result : SELECT "COL_1", "COL_2" FROM (SELECT DISTINCT A.COL_1, B.COL_2 FROM ABC.TABLE_1 A, XYZ.TABLE_2 B WHERE A.COL_3 = B.COL_3)

Для этого я попытаться предоставить выборочный доступ к роли, которую я использую

GRANT SELECT ON ABC_DEF.MY_VIEW TO MY_READ_ROLE;
ERROR at line 1:
ORA-01720: grant option does not exist for 'XYZ.TABLE_2'

Затем я пытаюсь предоставить выборку самой таблице

GRANT SELECT ON XYZ.TABLE_2 TO MY_READ_ROLE;

Grant succeeded.

И затем снова пытаюсь выполнить предоставление для представления , но я все еще получаю ту же ошибку. Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

Ваше мнение использует DBA_VIEWS. У вас есть привилегии для выбора из DBA_VIEW, но нет привилегии для предоставления выбора другим пользователям.

Это разница между:

Grant select on some_table to_some_user

и

Grant select on some_table to_some_user with grant option

В последнем случае some_user теперь может предоставлять select для some_table другим пользователям;

Возможно, вы можете выполнить sh то, что хотите, используя ALL_VIEWS вместо DBA_VIEWS.

0 голосов
/ 12 февраля 2020

Когда вы получили привилегию (например, SELECT ON ABC_DEF.MY_VIEW), вы не можете «переслать» свою привилегию кому-либо еще.

Для того, чтобы сделать это, вам нужна привилегия с помощью WITH GRANT OPTION, тогда вы можете передать эту привилегию кому-то другому.

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