如何在oracle中为特定用户查询没有所有者名称的表名

如何在oracle中为特定用户查询没有所有者名称的表名,oracle,plsql,plsqldeveloper,oracle19c,Oracle,Plsql,Plsqldeveloper,Oracle19c,在Oracle19c中,我使用SYS user创建了表,以便表的所有者名称为“SYS”。然后我创建了一个新用户,并将所有权限授予该用户。然后使用新创建的用户query登录 Select * from tblname 但是 ORA-00942:表或视图不存在 发现错误,但无法查询 Select * from SYS.tblname 有没有办法从另一个用户查询没有所有者名称的表名 有没有办法从另一个用户查询没有所有者名称的表名 当然有。为该表创建一个同义词,可以是private(属于您的模式)或

在Oracle19c中,我使用SYS user创建了表,以便表的所有者名称为“SYS”。然后我创建了一个新用户,并将所有权限授予该用户。然后使用新创建的用户query登录

Select * from tblname
但是

ORA-00942:表或视图不存在

发现错误,但无法查询

Select * from SYS.tblname
有没有办法从另一个用户查询没有所有者名称的表名

有没有办法从另一个用户查询没有所有者名称的表名

当然有。为该表创建一个同义词,可以是private(属于您的模式)或public(任何人都可以访问)

例如:作为
SCOTT
连接,我正在创建一个表,并将
SELECT
权限授予用户
MIKE

SQL> show user
USER is "SCOTT"
SQL> create table scott_table as
  2  select 'Littlefoot' name from dual;

Table created.

SQL> grant select on scott_table to mike;

Grant succeeded.
以MIKE的身份连接,并尝试从该表中选择:如果不指定所有者名称,它将无法工作:

SQL> connect mike/lion
Connected.
SQL> select * from scott_table;
select * from scott_table
              *
ERROR at line 1:
ORA-00942: table or view does not exist
如果我在表名前面加上所有者的名称,它将起作用(但您希望避免它):

因此,创建一个同义词:

SQL> create synonym scott_table for scott.scott_table;

Synonym created.

SQL> select * from scott_table;

NAME
----------
Littlefoot

SQL>

然而:你所做的是一个巨大的错误。永远不要搞乱
SYS
user<代码>系统是特殊的。它拥有数据库。建议不要使用它-创建您自己的用户,该用户将执行“系统相关”任务,并授予其
DBA
角色。只有在没有其他用户可以使用的情况下,才能使用
SYS
。在
SYS
schema中创建自己的表是您真正应该避免的事情

因为,
SYS
是如此特殊,所以您可以“忘记”您作为
SYS
连接,做一些您不打算做的事情,并破坏您的数据库

因此,我建议你不要这样做。在其他地方,在其他模式中创建该表,然后练习同义词等

SQL> create synonym scott_table for scott.scott_table;

Synonym created.

SQL> select * from scott_table;

NAME
----------
Littlefoot

SQL>