sql - Oracle SQL 开发人员 "table or view does not exist"

标签 sql oracle privileges

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

SELECT *
FROM CITY;

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

  1. 00000 - "table or view does not exist"

*Cause:
*Action:

Error at Line: 163 Column: 6

我发现如果我写:

SELECT *
FROM PARKING_PLACES.CITY ;

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

我已经尝试过了

GRANT RESOURCE to parking_places;

代码似乎可以工作,但这似乎也不是我需要的。

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

最佳答案

要访问表而不指定架构,Oracle 数据库中有 4 个选项:

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

b) 您授予您的用户或每个人访问该表的权限,并在 PUBLIC 中添加同义词。伪模式。 为owner.yourtable创建公共(public)同义词yourtable;。这会扰乱公共(public)空间并需要 sys 权限。

c) 您授予您的用户或每个人访问该表的权限,并在运行时用户的架构中添加同义词或 View 。这不会使公共(public)空间变得困惑,但需要为每个“运行时”用户添加/维护。

d) 您使用ALTER SESSION SET CURRENT_SCHEMA=owner;,这样以后所有不合格的表访问都将使用替​​代架构。当运行时用户访问安装用户拥有的架构时,通常会使用此方法。您可以将更改 session 添加为登录触发器,这样您就不需要在应用程序中执行此操作。

关于sql - Oracle SQL 开发人员 "table or view does not exist",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33067479/

相关文章:

sql - 使用字段分隔符连接 sql 查询的结果

oracle - 如何从 Oracle SQL Plus 传递来自 Unix 的变量名 SQL 文件来执行 SQL

spring-boot - Spring Keycloak 适配器权限策略执行器。如何设置

C++ 获得足够的权限以绑定(bind)到端口 80

sql - T-SQL中没有名称的输入参数

sql - 日期减法错误

sql - 嵌套 sql 子查询的 postgres 性能问题

c# - ORA-01858 : a non-numeric character was found where a numeric was expected

SQL - 围绕 AND 的 IF 语句

mysql - 如何将所有权限恢复到 MySQL 中的 root 用户?