我使用的是Oracle 11g,并且我理解第三方授予的问题。
但是,假设user1创建了一个视图“ view1”作为从double中选择'foo'。
然后,我将view1的Select授予user2,并且出现此错误。
但是请注意,视图中的“双”不符合sys.dual的条件,只是双重的。我想用同义词public.dual来考虑,实际使用的“ dual”将是public.dual,而不是sys.dual,因此不应存在第三者问题,因为它是公共的。
而且,如果sys.dual是Oracle在此视图中假设的模式,则人们会认为,鉴于在视图中使用double是常见的,并且将视图特权授予其他用户也很常见-不会有成千上万的用户在报告这个问题?
我确实看到零星的帖子,但是没有真正的解决方案,只是为创建视图的用户创建了另一个double副本,但这对我来说没有意义。谢谢你的帮助。
在咨询了我们的dbas之后,问题是11.2.0.4中的Oracle“功能”:
TL; DR版本:从11.0.4版开始,如果View使用Dual,则除了SELECT之外,您不能授予该View其他任何权限。
为什么我们要授予视图而不是选择更多的权限?在我们的案例中,应用程序供应商以如下方式打包更新程序:更新程序的数据库部分会自动为每个新对象(包括视图)的主应用程序模式编写完整的CRUD授予脚本,因为这样做更容易编写脚本。直到11.0.4甲骨文说/强制执行“嘿,您不能那样做”,所有这些都可以正常工作。
完整版本:
(引自Oracle网站https://support.oracle.com/epmos/faces/BugDisplay?parent=DOCUMENT&sourceId=1628033.1&id=17994036)
Oracle数据库-企业版-版本11.2.0.4至11.2.0.4 [版本11.2]本文档中的信息适用于任何平台。从11.2.0.3升级到11.2.0.4后,在执行“创建或替换视图”语句时遇到以下错误:ORA-01720:grant选项不存在升级和“创建或替换视图”之前已创建视图工作正常。原因观察到的行为是正确的。替换从某些其他用户表中选择的视图并且满足以下两个条件时,将收到此ORA-1720错误:
在11.2.0.4中更改了代码,因此创建视图的行为类似于授予。如果您尝试在现有视图上进行GRANT操作,而视图所有者没有授予选项,则ORA-1720是预期的结果(即使在11.2.0.3中也是如此)。在11.2.0.4中,我们仅使CREATE VIEW与GRANT行为保持一致,即,如果存在不兼容的授予,则必须不允许使用新的视图定义(即使使用FORCE)。换句话说,我们不允许不兼容的授予与视图定义共存,因此必须抛出错误。11.2.0.3版(及更早版本)中的行为不正确;11.2.0.4中的新行为是有意且正确的。解决方案为避免此问题,您可以执行以下任一操作:
参考BUG:17994036-使用ORA-01720升级到11.2.0.4创建或替换失败BUG:18024486-ORA-1720在从11.2.0.3.0升级到11.2.0.4.0之后创建视图时,ORA-1720