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