根据从 system_privilege_map 中选择名称系统已被授予:
SELECT ANY TABLE
...以及许多其他 * 任何表格。
平淡无奇
select * from the_table;
select * from the_table;
...网给定的响应:
第 1 行出现错误:ORA-00942:表或视图不存在
我可以以该用户身份登录并运行相同的命令。
我假设我应该能够针对一般用户的数据库表运行查询(在本例中为选择)。我的假设是否正确,如果是,我该怎么做?
正如前面的回复所说,您可以在对象名称前加上模式名称:
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不会影响您的权限:您仍然拥有登录用户的权限,而不是您设置的架构。
如果 the_table 归用户“some_user”所有,则:
select * from some_user.the_table;
你需要做:
SELECT * FROM schema_name.the_table;
或者使用同义词...
CREATE SYNONYM the_table FOR schema_name.the_table;