異なるスキーマのテーブルを含むビューを実行しようとすると、ORA-001031不十分な権限がスローされます。これらのテーブルには、ビューが作成されたスキーマに対する実行権限があります。ビューのSQLステートメントを実行すると機能します。私は何が欠けていますか?
テーブルの所有者は、SELECTステートメントを実行しているユーザーに、基になるテーブルに対するSELECTアクセスを許可する必要があります。
grant SELECT on TABLE_NAME to READ_USERNAME;
最後に、私はそれを動作させました。スティーブの答えは正しいですが、すべての場合に当てはまりません。そのビューが3番目のスキーマから実行されている場合、失敗します。それが機能するには、付与オプションを追加する必要があります。
GRANT SELECT ON [TABLE_NAME] TO [READ_USERNAME] WITH GRANT OPTION;
そうすれば、[READ_USERNAME]
は、ビューに対する選択特権を別のスキーマに付与することもできます。
Q.「付与オプション」はいつ必要ですか?
A. 3番目のスキーマからビューを実行しているとき。
例:スキーマDSDSWにはview_nameというビューがあります
a) that view selects from a table in another schema (FDR.balance)
b) a third shema X_WORK tries to select from that view
典型的な付与:dsdw.view_nameのselectをdsdw_select_roleに付与します。 dsdw_select_roleをfdrに付与します。
ただし、fdrはdsdw.view_nameからselect count(*)を取得します。 1行目のエラー:ORA-01031:権限が不十分です
助成金を発行:
grant select on fdr.balance to dsdw with grant option;
現在fdr:dsdw.view_nameからcount(*)を選択します。 5列
要約しておこう。
異なる所有者のオブジェクトを含むビューを作成する場合、他の所有者はビューの所有者に「付与オプション付き」を付与する必要があります。したがって、ビューの所有者は他のユーザーまたはスキーマに付与できます。
例:User_aはmine_aというテーブルの所有者ですUser_bはyours_bというテーブルの所有者です
User_bがmine_aとyours_bを結合したビューを作成したいとします
ビューを正常に機能させるには、user_aが「mine_aでのselectを付与オプションでuser_bに付与する」必要があります
その後、user_bはそのビューでの選択を全員に許可できます。
ストアドプロシージャを介してビューにアクセスする場合、実行許可はビューにアクセスするには不十分です。 selectを明示的に付与する必要があります。
単にこれを入力してください
すべてを一般に認める。
ストアドプロシージャを介してビューにアクセスする場合、実行許可はビューにアクセスするには不十分です。 selectを明示的に付与する必要があります。
ビューを使用するには、ユーザーは適切な権限を持っている必要がありますが、その基本オブジェクトではなく、ビュー自体に対してのみです。ただし、ビューの基礎となるオブジェクトのアクセス権限が削除されると、ユーザーはアクセスできなくなります。この動作は、ユーザーがビューをクエリするときに使用されるセキュリティドメインがビューの定義者のものであるために発生します。基礎となるオブジェクトの特権がビューの定義者から取り消されると、ビューは無効になり、誰もビューを使用できなくなります。したがって、ユーザーがビューへのアクセスを許可されている場合でも、定義者の権限がビューの基礎となるオブジェクトから取り消された場合、ユーザーはビューを使用できない場合があります。
Oracleドキュメント http://docs.Oracle.com/cd/B28359_01/network.111/b28531/authorization.htm#DBSEG98017