web-dev-qa-db-ja.com

ビューの選択を許可

どこかで問題が発生しており、その理由がわかりません。これはすでに謝罪されている場合。

私のデータベースには3つのスキーマがあります:COLLDESK LOCAL_IT GERBEN

COLLDESKはメインスキーマ、LOCAL_ITはローカル開発を行う場所、GERBENはエンドユーザーです(オプションのみを選択する必要があります)。

これで、COLSDESKスキーマにGESTIONESというテーブルができました。 LOCAL_ITにはACTIONSというビューがあります。これは、COLLDESKスキーマのテーブルGESTIONESの4つの列を保持しています。ここまでは順調ですね!

次に、ビューACTIONSでGERBENスキーマに選択特権を与えたいと思います。しかし、私が言うとき

grant select on LOCAL_IT.ACTIONS to GERBEN

「ORA-01720エラー:COLLDESK.GESTIONESの付与オプションが存在しません」というエラーが表示される

今私はGERBENの選択権限をGESTIONESに与えようとしましたが、それでもエラーメッセージが表示されます

どんな助けでも大歓迎です!

敬具

ガーベン

6
Gerben

エラーメッセージは次のように記述します。

ORA-01720:COLLDESK.GESTIONESの「付与オプション」は存在しません。

仕組みは次のとおりです。

3つのスキーマがあります。

  • Schema1-「table1」という名前のテーブルのホルダー
  • Schema2-schema1.table1から選択するビュー "view1"のホルダー
  • Schema3-schema2.view1から選択するユーザー-schema1.table1に対する選択が付与されていません。

あなたはおそらく次のことをしたでしょう:

grant select on schema1.table1 (COLLDESK.GESTIONES) to schema2;

ビューを作成しているので、selectはschema2に直接付与する必要があります。selectがロールを通じて付与されている場合、ビューは機能しません。

ここで、3番目のスキーマ(schema3)がビューを使用してschema1からデータを読み取ることを許可しようとしています。セキュリティ上の理由から、たとえデータを表示できたとしても、schema2はschema1から3番目のスキーマへのデータへのアクセスを決して許可されません。そうでなければ、これは大きなセキュリティホールになります。

したがって、解決策は、サードパーティにビューの選択特権が付与されたときに、schema2が間接的にその選択特権を付与できることを明示的にすることです。

解決:

grant select on schema1.table1 to schema2 with grant option;

これでschema2は、サードパーティにビューの選択を許可することができます。

grant select on schema2.view1 to schema3;

あなたのために:

grant select on COLLDESK.GESTIONED to LOCAL_IT with grant option;
grant select on LOCAL_IT.ACTIONS to GERBEN;

また、どうしても必要な場合を除き、パブリックビューやパブリックデータベースリンクの使用は避けてください。最初に他のすべてのオプションを使い切ってください。

8

ビューのパブリックシノニムを作成し、付与して再試行してください

create public synonym ACTIONS for LOCAL_IT.ACTIONS;

grant select on ACTIONS to GERBEN;
1
SriniV