我有一个用户(UserA)的账户里有很多表。我可以执行 SELECT * FROM TABLE
,一切正常。但是,如果我以只读连接的方式登录不同的用户(UserB),我就无法访问该表了。我必须使用SELECT * FROM UserA.TABLE
。
在Oracle中是否有一种方法可以允许UserB访问UserA的表而不必在表名前加上用户前缀?
以UserB身份登录后,运行以下语句:
ALTER SESSION SET current_schema = UserA;
之后您就不必在表名前加前缀了。
如果您不想手动运行,可以创建一个登录触发器自动完成这个操作。
你也可以通过在表上创建同义词来实现此目的:
CREATE SYNONYM TABLE FOR UserA.TABLE;
ALL_TABLES
系统表上运行查询来快速创建一个脚本:SELECT 'CREATE SYNONYM ' || TABLE_NAME || ' FOR ' || OWNER || '.' || TABLE_NAME || ';' FROM ALL_TABLES WHERE OWNER = 'UserA';
- markblandfordALL_OBJECTS
系统表,并通过OBJECT_TYPE
字段进行过滤。 - markblandford