アプリ版:「スタンプのみでお礼する」機能のリリースについて

「所有していないマテリアライズド・ビューのマスター表にアクセスする場合は、各表に対するSELECTオブジェクト権限またはSELECT ANY TABLEシステム権限が必要です。」
ということから、selectオブジェクト権限をつけた『ビュー』をもとに、マテリアライズドビューの作成はできないのでしょうか?
例)Aスキーマが所有するTESTビュー表をもとに、Bスキーマでマテリアライズドビューを作成する。
create materialized view mview as select * from A.TESTビュー;
create materialized view 権限は付与しました。
A.TESTビューに対するSELECTオブジェクト権限は付与しました。
結果としては、表またはビューがありません。とエラーがでます。
しかし、Aスキーマが所有するテーブルに対しては、問題なくマテリアライズドビューの作成はできます。
異なるスキーマの『ビュー』を元にマテリアライズドビューの作成は
できない。といった記述はないのですが、実際に作成ができません。
ご教授ください。

A 回答 (2件)

マテリアライズド・ビューの作成以前に・・


ビューにselect権限があっても、ビューが必要とするテーブルやビューに、オブジェクト権限がないのであれば
ビューを使えないと思いますが?
select権限を与えたビューが検索できるか確認してください。
ロールがあると確認が難しくなるので、小さなプロシジャでも書いて確認すると良いかと。
create or replace procedure a is c number; begin select count(*) into c from ビュー; end;
/
execute a;
たぶん、オブジェクト権限なしでコンパイルエラーになるか、ビューの検索でエラーになると思いますよ。
    • good
    • 1
この回答へのお礼

korochanさんありがとうございます。
プロシージャで確認する。という手法ありがとうございます。
結果としては、プロシージャ実行結果は件数がかえってきました。
プロシージャでは正常であるのに、
create materialized view mview
builc defferd
refresh force with rowid
on demand
as
select * from A.TESTビュー
では、エラーが以下のように出力されます。
ORA-00942:表またはビューが存在しません。
ORA-06512:"SYS.DBMS_SNAPSHOT_UTL" 行1543
ORA-06512:行1
ためしに、select * from A.TESTビューをもとに、create view ~
を実行すると、正常に作成できます。
どうもマテリアライズドビューはできないようなのです。
SYS.DBMS_SNAPSHOT_UTL は、暗号化されたパッケージで、
行1に何が書いてあるのかはわかりませんでした。

お礼日時:2007/12/18 00:06

どこまで確認されたかは分かりませんが・・・



1. MVIEW を作成したいユーザで

SQL> SELECT * FROM A.TESTビュー
OK ==> VIEW に対する MVIEW は作成できない
NG ==> →2 へ

2. TESTビューの元表にもA ユーザがアクセスできるように権限付与して1 の内容が成功するか確認してみる。。

SQL> GRANT SELECT ON 元表A TO SCOTT;

OK ==> 元表に対するSELECT 権限も必要 →MVIEW 作成へ
NG ==> コマンドのどこかに問題がある

こんな感じで切り分けできるのでは?

この回答への補足

1 の結果は、実行できたので、OKです。
ということは、VIEWに対するMVIEWは作成できない。ということになるのでしょうか?
エラー内容としては、
ORA-00942:表またはビューが存在しません
ORA-06512:"SYS.DBMS_SNAPSHOT_UTL" 行1543
ORA-06512:行1
という内容で、権限っぽいのですが、権限は満たしているようなのです。
VIEWをもとにしてマテリアライズドビューを作成する場合、
MVIEWを作成したいユーザが元表のビューを所有していないとだめなようです。

補足日時:2007/12/18 00:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す