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