GRANT INSERT参与可更新视图的表

时间:2017-08-14 13:05:52

标签: oracle grant

给定的数据库包含masterdata(MD)Schema和特定于应用程序的Schema(APP)。在APP Schema中,我们有一个视图,它提供了来自方案中一个表的应用程序数据以及来自MD Schema的数据。

示例:考虑一个地址簿应用程序,它包含一个地址表,但城市和邮政编码是从另一个集中维护的主数据表中加入的。

CREATE VIEW view_adress AS
SELECT app.ID, app.Street, app.ZIP, zip.CITYNAME
FROM APP.adress app 
LEFT OUTER JOIN MD.zipcodes zip
  ON app.ZIP = zip.ZIP

这是非常简化的。我使用的实际视图要复杂得多,因此我实现了一个INSTEAD OF INSERT,UPDATE Trigger,将视图上的INSERT映射到我的APP Schema中的正确基表。

应用程序用户(角色)在此APP模式中的所有表上被授予SELECT,INSERT,UPDATE,DELETE。它们还在主数据模式中的zipcode表上被授予SELECT。

当我在该视图上插入时,我得到“ORA-01720:授权选项不存在”...我不知道此错误的确切原因,但可以假设INSTEAD-OF触发器永远不要在邮政编码表上插入,只能在地址表上。

据我所知,在zipcode表上授予应用程序用户INSERT权限可能会解决这个问题,但我感到不舒服的是在桌面上向用户授予INSERT,他们永远不应该以任何方式编辑它们,因为这些只是查找。

还有另一种,可能是“正确的方法”来解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

"权限错误不足"你是说这个吗?

  

ORA-01720:' MD.ZIPCODES'

不存在授予选项      

*原因:正在对视图执行授权或正在替换视图              并且基础对象没有授予选项。

     

*操作:获取视图的所有基础对象的授予选项或              撤销视图中的现有授权。

如果是这样,解决方案是您需要向拥有视图的架构授予相关权限 - 到使用该视图的角色:

grant insert on md.zipcodes to app with grant option;

确实,您仍然必须授予逻辑上不需要的权限,但您不会向用户授予权限,只授予app架构。