異なるスキーマのテーブルを含むビューを実行しようとすると、ORA-001031 不十分な権限がスローされます。これらのテーブルには、ビューが作成されたスキーマに対する実行権限があります。ビューの SQL ステートメントを実行すると、機能します。私は何が欠けていますか?
8 に答える
最後に、私はそれを機能させました。スティーブの答えは正しいですが、すべての場合に当てはまるわけではありません。そのビューが 3 番目のスキーマから実行されている場合は失敗します。それが機能するには、付与オプションを追加する必要があります。
GRANT SELECT ON [TABLE_NAME] TO [READ_USERNAME] WITH GRANT OPTION;
そう[READ_USERNAME]
すれば、ビューに対する選択権限を別のスキーマに付与することもできます
テーブルの所有者は、SELECTステートメントを実行しているユーザーに基になるテーブルへのSELECTアクセスを許可する必要があります。
grant SELECT on TABLE_NAME to READ_USERNAME;
要約をさせてください。
異なる所有者のオブジェクトを含むビューを作成する場合、それらの他の所有者はビューの所有者に「with grant オプション」を付与する必要があります。したがって、ビューの所有者は他のユーザーまたはスキーマに付与できます....
例: User_a は mine_a というテーブルの所有者です User_b は yours_b というテーブルの所有者です
user_b が mine_a と yours_b を結合したビューを作成したいとします。
ビューが正常に機能するためには、user_a は「mine_a の選択を user_b に許可オプション付きで許可」する必要があります。
次に、user_b はそのビューの選択を全員に許可できます。
ストアド プロシージャを介してビューにアクセスする場合、ビューにアクセスするには実行許可が不十分です。select を明示的に付与する必要があります。
ビューを使用するには、ユーザーは適切な権限を持っている必要がありますが、ビュー自体に対してのみであり、その下にあるオブジェクトに対しては必要ありません。ただし、ビューの基礎となるオブジェクトに対するアクセス権限が削除されると、ユーザーはアクセスできなくなります。この現象は、ユーザーがビューに対してクエリを実行するときに使用されるセキュリティ ドメインが、ビューの定義者のものであるために発生します。基礎となるオブジェクトに対する権限がビューの定義者から取り消されると、ビューは無効になり、誰もビューを使用できなくなります。したがって、ユーザーがビューへのアクセスを許可されていても、定義者の権限がビューの基礎となるオブジェクトから取り消されている場合、ユーザーはビューを使用できない場合があります。
Oracle ドキュメント http://docs.oracle.com/cd/B28359_01/network.111/b28531/authorization.htm#DBSEG98017