在视图上授予选择权

时间:2014-06-19 13:31:33

标签: oracle select database-schema grant

在某个地方出现问题,我似乎无法找出原因。如果已经要求道歉。

我的数据库中有3个架构: COLLDESK LOCAL_IT 戈

COLLDESK是我们的主要模式,LOCAL_IT是我们进行本地开发的地方,而GERBEN是最终用户(应该只有选择选项)。

现在我的COLLDESK架构中有一个名为GESTIONES的表。在LOCAL_IT中,我有一个名为ACTIONS的视图。这将保留COLLDESK模式中GESTIONES表中的4列。到目前为止一切都很好!

现在我想在视图ACTIONS中给出GERBEN模式选择权限。但是当我说

grant select on LOCAL_IT.ACTIONS to GERBEN

我收到错误ORA-01720:COLLDESK.GESTIONES不存在授予选项

现在我尝试向GESTIONES提供GERBEN select权限,但我仍然收到错误消息

非常感谢任何帮助!

亲切的问候

2 个答案:

答案 0 :(得分:7)

错误信息应该写成:

ORA-01720:COLLDESK.GESTIONES不存在“授予选项”。

以下是它的工作原理:

你有3个模式:

  • Schema1 - 名为“table1”
  • 的表的持有者
  • Schema2 - 从schema1.table1
  • 中选择视图“view1”的持有者
  • Schema3 - 用户,从schema2.view1中选择 - 没有在schema1.table1上授予选择。

您可能已完成以下操作:

grant select on schema1.table1 (COLLDESK.GESTIONES) to schema2;

请注意,由于您正在创建视图,因此必须直接向schema2授予select,如果通过角色授予select,则视图将不起作用。

现在,您尝试允许第3个架构(schema3)使用schema1中的视图读取数据。出于安全考虑,即使可以查看数据,也绝不允许schema2访问schema1中的数据到第3个模式。否则这将是一个巨大的安全漏洞。

因此,解决方案是明确表示当第三方被授予视图的选择权限时,schema2将能够间接地授予该选择权限。

解决方案:

grant select on schema1.table1 to schema2 with grant option;

现在,schema2可以将其视图上的select授予第三方:

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 :(得分:1)

为视图创建公共同义词,然后使用您的拨款再次尝试

create public synonym ACTIONS for LOCAL_IT.ACTIONS;

grant select on ACTIONS to GERBEN;