Oracle 11gを使用しています。db構造は次のようになります。
ユーザーCST
とFAS
がいます。CST
にはテーブルST_CAT2
が含まれています。パブリックシノニムST_CAT
がSYS
ユーザーとしてテーブルCST.ST_CAT2
に対して作成されました。ST_ROLE
は、SELECT UPDATE DELETE ALTER
に対するST_CAT2
特権を付与したロールです。 ST_ROLE
がFAS
に付与されます。
さて、ビューを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
原因は何でしょうか?
SQL言語リファレンス では、Prerequesites(私が強調)の下にあります:
ビューを含むスキーマの所有者は、ビューの基になるすべてのテーブルまたはビューから行を選択(READまたはSELECT特権)、挿入、更新、または削除するために必要な特権を持っている必要があります。 所有者には、ロールではなく、直接これらの権限を付与する必要があります。
したがって、ビューを作成するユーザーに直接特権を付与する必要があります。
同じことがPL/SQLプロシージャにも当てはまり、すでに この投稿 で説明されています。
選択権限を直接付与するには、2つの方法があります。
grant select on A_TABLE to A_USER;
grant select any table to A_USER;
後者はお勧めできません。DBA以外のユーザーにこのようなANYシステム権限を付与すると、 セキュリティリスク と見なされます。
このようなANY特権は、多くの手順とアクションに対して存在します。任意のテーブルを挿入し、任意の手順を実行します...