スキーマAからスキーマCのテーブルをクエリすると、ORA-01031:不十分な権限が得られ、スキーマBから同じテーブルをクエリすると、得られます- ORA-00942:テーブルまたはビューが存在しません。テーブルでは、どちらのスキーマにも特権がありません。この場合に異なるエラーメッセージが表示されるのはなぜですか?
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>
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';
これは、suppliersテーブルを所有するスキーマ名を返します。
SQL Developer:すべてが正常に機能し、ログインするためのすべての権限があり、パスワードの変更はなく、テーブルをクリックしてデータタブを表示できました。
しかし、クエリ(単純なselect文)を実行すると、「ORA-01031:権限が不十分です」というメッセージが表示されていました。
解決策は、単に接続を切断して再接続することです。注:再接続を行うだけではうまくいきませんでした。 SQL Developer Disconnect Snapshot