从其他用户访问Oracle架构对象而不使用用户前缀

从其他用户访问Oracle架构对象而不使用用户前缀,oracle,oracle10g,oracle11g,Oracle,Oracle10g,Oracle11g,我有一个用户,他们的帐户有很多表。让我们来看看UserA。我可以从表中选择*,一切都很好。如果我以另一个用户UserB登录,但将此用户设为只读连接,则我无法访问该表,我必须使用SELECT*FROM UserA.table Oracle中是否有一种方法允许UserB访问UserA的表,而不必将用户前缀放在表名之前?以UserB身份登录后,运行以下语句: ALTER SESSION SET current_schema = UserA; 之后,不必在表名前加前缀 如果不想手动运行,您可以创建一个

我有一个用户,他们的帐户有很多表。让我们来看看UserA。我可以从表中选择*,一切都很好。如果我以另一个用户UserB登录,但将此用户设为只读连接,则我无法访问该表,我必须使用
SELECT*FROM UserA.table


Oracle中是否有一种方法允许UserB访问UserA的表,而不必将用户前缀放在表名之前?

以UserB身份登录后,运行以下语句:

ALTER SESSION SET current_schema = UserA;
之后,不必在表名前加前缀


如果不想手动运行,您可以创建一个自动执行此操作的登录触发器。

您也可以通过在表上创建同义词来执行此操作:

CREATE SYNONYM TABLE FOR UserA.TABLE;

没有可以为UserB设置的权限吗?更改当前的_架构是我知道的唯一方法。使用登录触发器将是使此“自动”的方法我假设我必须为UserA拥有的每个表创建一个同义词?@Jon不幸的是,是的,尽管您可以通过对
ALL_表
system表运行查询来快速创建脚本:
为“|所有者| | |”选择“create synonym”|表|名| |”从所有的_表中,其中OWNER='UserA'
如果您还需要视图,请尝试使用
所有对象
系统表,并按
对象类型
字段进行筛选。谢谢。同义词应该只存在于表、视图和过程中吗?我假设您没有为索引etcCorrect创建它们。有关更多详细信息,请参阅Oracle文档:您还应注意,同义词仅适用于创建它的用户,除非您使用了
PUBLIC
关键字,该关键字可供所有用户使用。