当我从模式A查询模式C中的表时,我得到ORA-01031:权限不足,当我从模式B查询同一个表时,我得到的是ORA-00942:表或视图没有存在。在表上,两个模式都没有任何特权。在这种情况下,为什么我会收到不同的错误消息?
当你在桌面上拥有至少一个特权时,你可能会获得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>
当对象存在于模式中但没有对该对象的任何访问权时,就会发生ORA-01031: insufficient privileges
。
当对象在当前模式中不存在时,会发生ORA-00942: table or view does not exist
。如果对象存在于另一个模式中,则需要使用它来访问它。如果所有者未授予对调用模式的访问权限,则仍然可能会获得不足的权限错误。
对于ORA-01031:权限不足。一些更常见的原因是:
UPDATE
,但你只有SELECT
访问表。CONNECT INTERNAL
启动Oracle数据库。解决此Oracle错误的选项是:
对于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';
这将返回拥有供应商表的架构名称。
在SQL Developer中:Everything工作正常,我拥有登录的所有权限,并且没有密码更改,我可以单击该表并查看数据选项卡。
但是当我运行查询(简单的select语句)时,它显示“ORA-01031:权限不足”消息。
解决方案是断开连接并重新连接。注意:只做重新连接对我不起作用。 SQL Developer Disconnect Snapshot