Oracle:在视图上授予选择

时间:2020-02-12 13:09:35

标签: database oracle

我正在尝试对包含以下几张表的视图执行选择操作

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 个答案:

答案 0 :(得分:2)

您的视图使用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现在可以将some_table上的select授予其他用户;

也许您可以使用ALL_VIEWS而不是DBA_VIEWS完成您想要的事情。

答案 1 :(得分:0)

收到特权(例如SELECT ON ABC_DEF.MY_VIEW)后,您就无法将特权“转发”给其他人。

为此,您需要使用WITH GRANT OPTION来获得特权,然后可以将该特权转发给其他人。