授予对视图的选择权限。

8
在某个地方,出了点问题,我似乎找不到原因。如果已经有人问过这个问题,请见谅。
我在数据库中有3个模式: COLLDESK LOCAL_IT GERBEN
COLLDESK是我们的主要模式,LOCAL_IT是我们进行本地开发的地方,GERBEN是最终用户(应该只有选择选项)。
现在,在我的COLLDESK模式中有一个名为GESTIONES的表。在LOCAL_IT中,我有一个名为ACTIONS的视图。这个视图从COLLDESK模式中的GESTIONES表中获取4列数据。到目前为止一切顺利!
现在,我想给GERBEN模式在视图ACTIONS中赋予选择权限。但是当我说
grant select on LOCAL_IT.ACTIONS to GERBEN

我遇到了错误ORA-01720: grant option does not exist for COLLDESK.GESTIONES

我试过将GERBEN赋予GESTIONES的选择权限,但仍然收到错误信息。

非常感谢任何帮助!

祝好

Gerben

4个回答

22
错误信息应该像这样编写:
ORA-01720: "grant option" does not exist for COLLDESK.GESTIONES.
它的工作原理如下:
你有3个模式:
Schema1 - 持有名为“table1”的表
Schema2 - 持有从schema1.table1选择的视图“view1”
Schema3 - 用户,从schema2.view1进行选择 - 在schema1.table1上没有被授予select权限。
您可能已经执行了以下操作:
grant select on schema1.table1 (COLLDESK.GESTIONES) to schema2;

注意,由于您正在创建视图,所以必须直接授予schema2选择权限,如果通过角色授予选择权限,则您的视图将无法工作。
现在您正在尝试允许第三个模式(schema3)使用视图从schema1中读取数据。出于安全考虑,即使它可以查看数据,也永远不会允许schema2从schema1访问数据到第三方模式。否则,这将是一个巨大的安全漏洞。
因此,解决方案是明确表示当第三方被授予视图的选择权限时,schema2将能够间接地授予该选择权限。
解决方案:
grant select on schema1.table1 to schema2 with grant option;

现在,schema2被允许将其视图上的选择权限授予第三方:

grant select on schema2.view1 to schema3;

为您提供:

grant select on COLLDESK.GESTIONED to LOCAL_IT with grant option;
grant select on LOCAL_IT.ACTIONS to GERBEN;

同时: 避免使用公共视图和公共数据库链接,除非绝对必要。首先尽量使用其他选项。


1
创建视图的公共同义词并尝试使用您的授权再次操作。
create public synonym ACTIONS for LOCAL_IT.ACTIONS;

grant select on ACTIONS to GERBEN;

当我尝试运行你的第一个查询时,出现了“缺少关键字”错误。 - Gerben
1
不得不改变一些其他的东西。在将select授权给GERBEN之前,我必须运行查询grant select on gestiones to local_it with grant option。无论如何,感谢您的帮助,非常感激! - Gerben

0

对于没有访问视图结构的最终用户

grant select on COLLDESK.GESTIONED to LOCAL_IT with grant option;
create synonym LOCAL_IT.VWACTIONS for LOCAL_IT.ACTIONS;

grant select on LOCAL_IT.VWACTIONS to GERBEN;

它可以工作


0

对于没有访问视图结构的最终用户而言

create public synonym  V_ALERT_001 for usr_sms.V_ALERT_01 (lacal view );
grant select on V_ALERT_001 to USER_ALERT;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接