Oracle SQL Developer“表或视图不存在”

Lit*_*ion 3 sql oracle privileges

我对 sql 开发人员很陌生,我知道这个问题被问过并回答过很多次,但我没有找到我需要的答案。我知道这是非常基本的,但我在任何地方都找不到。所以这是我的小代码:

SELECT *
FROM CITY;
Run Code Online (Sandbox Code Playgroud)

很简单,但是“city”是我自己创建的一个用户表(称为parking_places)(它在System 下)。现在,如果我尝试吃午饭,我会收到以下错误:

  1. 00000 - “表或视图不存在”

*原因:
*行动:

行错误:163 列:6

我发现如果我写:

SELECT *
FROM PARKING_PLACES.CITY ;
Run Code Online (Sandbox Code Playgroud)

我得到了预期的结果。现在的重点是我不希望每次使用表时都写用户名,在网上环顾四周我发现这是一个权限问题(至少我是这么理解的),现在我如何给用户parking_places权限它需要做我想做的事?还是不是权限问题?

我已经试过了

GRANT RESOURCE to parking_places;
Run Code Online (Sandbox Code Playgroud)

代码似乎有效,但似乎也不是我需要的。

如果可能的话,我更喜欢代码而不是带有 GUI 作为答案的过程,非常感谢!

eck*_*kes 5

要在不指定架构的情况下访问表,您在 Oracle 数据库中有 4 个选项:

a) 您以表所在的模式登录。这是很常见的事情,因为通常您只有一个用户。它的缺点是您的运行时用户实际上是表的所有者,因此不能限制访问。

b) 您授予您的用户或所有人访问该表的权限,并在 PUBLIC 中添加同义词。伪模式。CREATE PUBLIC SYNONYM yourtable FOR owner.yourtable;. 这会弄乱公共空间并需要 sys 权限。

c) 您授予您的用户或所有人对该表的访问权限,并在运行时用户的架构中添加同义词或视图。这不会使公共空间混乱,但需要为每个“运行时”用户添加/维护它。

d) 您使用ALTER SESSION SET CURRENT_SCHEMA=owner;这种方式以后所有非限定表访问都将使用替​​代模式。当您让运行时用户访问由安装用户拥有的模式时,通常会使用此方法。您可以将更改会话添加为登录触发器,这样您就无需在应用程序中执行此操作。