web-dev-qa-db-ja.com

ORA-00942:シノニムの作成中に表またはビューが存在しません

Oracle 11gを使用しています。db構造は次のようになります。

ユーザーCSTFASがいます。
CSTにはテーブルST_CAT2が含まれています。パブリックシノニムST_CATSYSユーザーとしてテーブルCST.ST_CAT2に対して作成されました。
ST_ROLEは、SELECT UPDATE DELETE ALTERに対するST_CAT2特権を付与したロールです。 ST_ROLEFASに付与されます。

さて、ビューをFASとして作成している間、

CREATE OR REPLACE VIEW "FAS"."EXTERNAL_SR" ("PROD_ID", "PRODUCT") AS 
SELECT
prod_id,
    product
FROM
st_cat;

エラーが発生しています

ORA-00942: table or view does not exist

原因は何でしょうか?

2

SQL言語リファレンス では、Prerequesites(私が強調)の下にあります:

ビューを含むスキーマの所有者は、ビューの基になるすべてのテーブルまたはビューから行を選択(READまたはSELECT特権)、挿入、更新、または削除するために必要な特権を持っている必要があります。 所有者には、ロールではなく、直接これらの権限を付与する必要があります。

したがって、ビューを作成するユーザーに直接特権を付与する必要があります。

同じことがPL/SQLプロシージャにも当てはまり、すでに この投稿 で説明されています。

選択権限を直接付与するには、2つの方法があります。

  1. オブジェクト権限で付与:grant select on A_TABLE to A_USER;
  2. システム権限で付与:grant select any table to A_USER;

後者はお勧めできません。DBA以外のユーザーにこのようなANYシステム権限を付与すると、 セキュリティリスク と見なされます。

このようなANY特権は、多くの手順とアクションに対して存在します。任意のテーブルを挿入し、任意の手順を実行します...

2
miracle173