获取ORA-01031:查询表而不是ORA-00942时权限不足:表或视图不存在

时间:2014-01-08 06:35:00

标签: oracle privileges

当我从架构A查询架构C中的表时,我得到 ORA-01031:权限不足,当我从架构B查询同一个表时,我是获取 ORA-00942:表或视图不存在。在表上,两个模式都没有任何特权。在这种情况下,为什么我会收到不同的错误消息?

5 个答案:

答案 0 :(得分:7)

如果您对该表至少拥有一项权限,则可能会获得ORA-01031: insufficient privileges而不是ORA-00942: table or view does not exist

创建架构

SQL> create user schemaA identified by schemaA;

User created.

SQL> create user schemaB identified by schemaB;

User created.

SQL> create user test_user identified by test_user;

User created.

SQL> grant connect to test_user;

Grant succeeded.

创建对象和权限

在不授予SELECT的情况下授予模式像DELETE这样的特权是不寻常的,但也是可能的。

SQL> create table schemaA.table1(a number);

Table created.

SQL> create table schemaB.table2(a number);

Table created.

SQL> grant delete on schemaB.table2 to test_user;

Grant succeeded.

以TEST_USER身份连接并尝试查询表格

这表明在表上拥有某些特权会更改错误消息。

SQL> select * from schemaA.table1;
select * from schemaA.table1
                      *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> select * from schemaB.table2;
select * from schemaB.table2
                      *
ERROR at line 1:
ORA-01031: insufficient privileges


SQL>

答案 1 :(得分:1)

当对象存在于模式中但没有对该对象的任何访问权时,会发生

ORA-01031: insufficient privileges

当对象在当前架构中不存在时,会发生

ORA-00942: table or view does not exist。如果对象存在于另一个模式中,则需要使用..如果所有者未授予对调用模式的访问权限,您仍然可以获得不足的权限错误。

答案 2 :(得分:1)

对于ORA-01031:权限不足。一些更常见的原因是:

  1. 您试图在没有相应权限的情况下更改Oracle用户名或密码。
  2. 您尝试对表格执行UPDATE,但您只能SELECT访问该表格。
  3. 您尝试使用CONNECT INTERNAL启动Oracle数据库。
  4. 您试图安装Oracle数据库而没有对操作系统的适当权限。
  5. 解决此Oracle错误的选项是:

    1. 您可以让Oracle DBA授予您缺少的相应权限。
    2. 您可以让Oracle DBA为您执行操作。
    3. 如果您在启动Oracle时遇到问题,可能需要将Oracle用户添加到dba组。
    4. 对于ORA-00942: table or view does not exist.您试图执行一个SQL语句,该语句引用一个不存在的表或视图,您没有权限或属于另一个模式而您没有引用该表通过架构名称。

      如果由于表或视图不存在而发生此错误,则需要创建表或视图。

      您可以通过执行以下SQL语句来检查Oracle中是否存在该表:

      select *
      from all_objects
      where object_type in ('TABLE','VIEW')
      and object_name = 'OBJECT_NAME';
      

      例如,如果您要查找供应商表,则执行:

      select *
      from all_objects
      where object_type in ('TABLE','VIEW')
      and object_name = 'SUPPLIERS';
      

      选项#2

      如果由于您无权访问表或视图而发生此错误,则需要拥有表/视图的所有者,或者DBA授予您对此对象的适当权限。

      选项#3

      如果发生此错误是因为表/视图属于另一个模式而您没有通过模式名称引用该表,则需要重写SQL以包含模式名称。

      例如,您可能已执行以下SQL语句:

      select *
      from suppliers;
      

      suppliers表不归您所有,而是由一个名为app的架构拥有,您可以按如下方式修复SQL:

      select *
      from app.suppliers;
      

      如果您不知道供应商表/视图所属的架构,您可以执行以下SQL来查找:

      select owner
      from all_objects
      where object_type in ('TABLE','VIEW')
      and object_name = 'SUPPLIERS';
      

      这将返回拥有供应商表的架构名称。

答案 3 :(得分:0)

在SQL Developer中:一切工作正常,我拥有所有登录权限,并且没有密码更改,我可以单击表格并查看“数据”选项卡。

但是当我运行查询(简单的select语句)时,它显示“ ORA-01031:权限不足”消息。

解决方案是简单地断开连接并重新连接。 注意:仅执行重新连接对我不起作用。 SQL Developer Disconnect Snapshot

答案 4 :(得分:-2)

ORA-01031:特权不足 解决方案:转到您的系统用户。 然后编写此代码:

SQL>将dba授予UserName; //输入该用户名,该用户显示此错误消息。

授予成功。