« 文字列の分解 | トップページ | ある文字列のうち、nバイト以内に収まるのは何文字か »

2013年8月29日 (木)

Oracleで三者間の権限設定をする話

Oracle で、あるユーザ/スキーマで見える他のユーザ/スキーマのオブジェクトを制限したい。 権限いろいろ付けたり消したりでやりますが、ビューが絡むと単純なやり方ではダメな場合がある。 制限したいっつーより一部だけ許可したいという場合ですな。


二者間の場合についてはここ http://www50.tok2.com/home/oppama/oramemo.html の「元表の持ち主にビューをGRANTしてもORA-01720が発生する」に書いてあるんですが、三者間でどうなるのかがいまいち理解できてなかった。ので一応メモ。


スキーマA に テーブルa が、スキーマB に ビューb があって テーブルa を参照しています。
スキーマC は テーブルa を直にも見るし、 ビューb も見たい。
その他 テーブルx や ビューy が存在してますが、スキーマC からは ab だけ見えて xy は見えない状態にしないといけない。



初期状態よくわかんないんだけど、スキーマCは自分のもの以外何も見えないように設定しておきます。
スキーマAで入って、スキーマCにテーブルaのSELECT権限を与えます。


GRANT select ON scheme_A.table_a TO scheme_C


ビューbのSELECT権限も与えます、


GRANT select ON scheme_B.view_b TO scheme_C


としようとすると、ORA-01720 のエラーを出されます。
ので、まずスキーマBに、テーブルaのSELECT権限を、WITH GRANT OPTION 付きで与える必要があります。


GRANT select ON scheme_A.table_a TO scheme_B WITH GRANT OPTION


その後、スキーマCにビューbのSELECT権限をつけると大丈夫です。


GRANT select ON scheme_B.view_b TO scheme_C


A ← B ← C
↑←←←↓


Cに付けたいのにA-B間の権限にオプションを付けてやらなければならないという話でした。



ちょっと厳しいところだと、すでに使われている権限に対して操作をくわえるなんてとんでもない、もしなんかあったらどうすんだ、ということで拒否されそうな状況ですね。
結局ウチでもこれは採用されず、スキーマBのビューbと同じ定義文でスキーマCにもビューbを作ったっぽい。


世の中そういう、既存のものに手を加えるのははばかられる状況ばっかりですから、そんなことしなくても新しく作るものへの設定だけで何とかなるようにしてほしいなー。



2016/06/09 に書きました。

« 文字列の分解 | トップページ | ある文字列のうち、nバイト以内に収まるのは何文字か »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Oracleで三者間の権限設定をする話:

« 文字列の分解 | トップページ | ある文字列のうち、nバイト以内に収まるのは何文字か »

AmazonSearch


最近のトラックバック

無料ブログはココログ