作为Sqlplus中的System,我如何查询另一个用户的表?
时间:2020-03-06 14:36:42 来源:igfitidea点击:
根据从system_privilege_map中选择的名称,系统已被授予:
SELECT ANY TABLE
...以及许多其他*任何表。
运转顺畅
select * from the_table; select * from the_table;
...得到给定的响应:
ERROR at line 1: ORA-00942: table or view does not exist
我可以以该用户身份登录并运行相同的命令。
我在假设我应该能够运行查询(在这种情况下选择)以反对普通用户的数据库表的情况下运行。我的假设正确吗?如果是,我该怎么做?
解决方案
如果the_table由用户" some_user"拥有,则:
select * from some_user.the_table;
我们需要执行以下操作:
SELECT * FROM schema_name.the_table;
或者使用SYNONYM ...
CREATE SYNONYM the_table FOR schema_name.the_table;
正如前面的回答所说,我们可以在对象名称前添加模式名称:
SELECT * FROM schema_name.the_table;
或者,我们可以使用同义词(私有或者公开):
CREATE (PUBLIC) SYNONYM the_table FOR schema_name.the_table;
或者,我们可以发出alter session命令将默认架构设置为所需的架构:
ALTER SESSION SET current_schema=schema_name;
注意,这只是设置默认模式,等效于在所有(非限定的)对象名前加上" schema_name"。我们仍然可以使用不同的架构名称作为对象的前缀,以从另一个架构访问对象。使用SET current_schema
不会影响特权:我们仍然拥有以其身份登录的用户的特权,而不是已设置的模式的特权。