创建同义词是否会自动授予对oracle中基础表的选择访问权限

我在我们的 oracle 数据库中有两个用户 - schema1 和 schema 2。

我在schema1中创建了一个表和同义词如下

创建表测试(用户 varchar2(25));

为 schema1.test 创建或替换同义词 schema2.test

当我尝试从我们的开发和生产环境之间的 schema2 查询测试表时,我观察到了行为的差异。

select * from test
在我们的开发环境中没有抛出任何错误。

但是当我在生产中运行相同的命令时,schema2 的权限不足错误。我必须在生产中将测试表的 select 授予显式授予 schema2。

为什么在开发环境和生产环境之间会出现这种差异?

创建同义词是否会自动授予对 oracle 中基础表的选择访问权限?

回答

不,它没有。从文档:

然而,同义词不能替代数据库对象的特权。在用户可以使用同义词之前,必须向用户授予适当的权限。

假设在您没有意识到或记住的情况下没有直接或通过角色(当然您可以轻松检查)授予表上的特权,听起来schema2在您的开发环境中具有“任何”特权 - 例如select any table- 作为捷径,可能是为了方便。这可以是直接的,也可以是通过角色。

再次来自文档

READ ANY TABLESELECT ANY TABLE系统权限还允许您从任何表中选择数据,物化视图,分析视图,或层次,或任何物化视图,分析视图,或层级的基表。

不应轻易授予这些特权,因此它们不在生产中出现也就不足为奇了。如果他们必须在开发中 - 并且必须有人同意 - 那么在您尝试部署到生产之前,具有与生产相同限制的中间测试或模型环境将有助于识别差异,例如缺少授权。


以上是创建同义词是否会自动授予对oracle中基础表的选择访问权限的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>