web-dev-qa-db-ja.com

ORA-01031を取得:不十分な権限を代わりにORA-00942のテーブルを照会しながら:表またはビューが存在しません。

スキーマAからスキーマCのテーブルをクエリすると、ORA-01031:不十分な権限が得られ、スキーマBから同じテーブルをクエリすると、得られます- ORA-00942:テーブルまたはビューが存在しません。テーブルでは、どちらのスキーマにも特権がありません。この場合に異なるエラーメッセージが表示されるのはなぜですか?

11
Nitish

ORA-01031: insufficient privileges の代わりに ORA-00942: table or view does not existテーブルに対して少なくとも1つの特権を持っているが、必要な特権は持っていない場合。

スキーマの作成

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として接続し、テーブルのクエリを試みます

これは、テーブルにsome特権があると、エラーメッセージが変更されることを示しています。

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>
7
Jon Heller

ORA-01031: insufficient privilegesは、オブジェクトがスキーマに存在するが、そのオブジェクトへのアクセス権がない場合に発生します。

ORA-00942: table or view does not existは、オブジェクトが現在のスキーマに存在しない場合に発生します。オブジェクトが別のスキーマに存在する場合、。を使用してアクセスする必要があります。所有者が呼び出し元のスキーマへのアクセス権を与えていない場合でも、権限不足エラーが発生する可能性があります。

1
San

oRA-01031の場合:権限が不十分です。一般的な原因には次のものがあります。

  1. 適切な権限を持たずにOracleユーザー名またはパスワードを変更しようとしました。
  2. テーブルに対してUPDATEを実行しようとしましたが、テーブルへのアクセスはSELECTしかありません。
  3. CONNECT INTERNALを使用してOracleデータベースを起動しようとしました。
  4. オペレーティングシステムに対する適切な権限を持たずにOracleデータベースをインストールしようとしました。

このOracleエラーを解決するオプションは次のとおりです。

  1. Oracle DBAに、不足している適切な権限を付与することができます。
  2. Oracle DBAに操作を実行させることができます。
  3. Oracleの起動に問題がある場合は、Oracleユーザーをdbaグループに追加する必要があります。

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';

これは、suppliersテーブルを所有するスキーマ名を返します。

1
Piyush Jain

SQL Developer:すべてが正常に機能し、ログインするためのすべての権限があり、パスワードの変更はなく、テーブルをクリックしてデータタブを表示できました。

しかし、クエリ(単純なselect文)を実行すると、「ORA-01031:権限が不十分です」というメッセージが表示されていました。

解決策は、単に接続を切断して再接続することです。注:再接続を行うだけではうまくいきませんでした。 SQL Developer Disconnect Snapshot

0
Rajesh Goel