アプリケーションのデータが配置されているテーブルスペースを持つスキーマがあります。ここで、データを選択するためだけにアクセスできる別のスキーマが必要です。そのスキーマのビューのセットを作成したいと思います。
私の質問は次のとおりです。
同じテーブルスペースにスキーマを作成し、その許可を一部のビューのみに制限することは可能ですか(元のテーブルへのアクセスを許可しません)?
そのスキーマ用に個別のテーブルスペースを作成し、それらの両方で機能するビューと付与を作成することは可能ですか?
どちらを使用するよりも両方が可能である場合、およびその理由は何ですか?
前もって感謝します。
3つのスキーマを作成しました。
[〜#〜] a [〜#〜]はテーブルFOO
を持つものです
grant select on FOO to B
[〜#〜] b [〜#〜]はビューを作成することです
create or replace view BAR as
select * from A.FOO
[〜#〜] c [〜#〜]はselect * from B.BAR
できると思われますが、(as B):
grant select on BAR to C
エラーが発生します:
Error: ORA-01720: grant option does not exist for 'A.FOO'
基本的に私は3つのレベルを達成したいと思っています:
[〜#〜] a [〜#〜](元のテーブル)<[〜#〜] b [〜#〜](ビュー定義)<[〜#〜] c [〜#〜](ビューからのみ選択)
しかし、元のテーブルを読み取るためにCに直接アクセスを許可する必要があるようですが、これではすべてのアイデアが失敗します。
同じテーブルスペースにスキーマを作成し、その許可を一部のビューのみに制限することは可能ですか(元のテーブルへのアクセスを許可しません)?
はい。また、懸念事項がこれらのテーブルへの読み取り専用アクセスのみに限定されている場合は、個別のビューを作成する必要もありません。新しいスキーマを作成して、それらのテーブルにselectを付与するだけです。
そのスキーマ用に個別のテーブルスペースを作成し、それらの両方で機能するビューと付与を作成することは可能ですか?
はい。このスキーマでビューを作成するだけの場合は、ビュー(名前付きで検証済みのSQLクエリ)がOracleデータディクショナリに格納されるため、個別のテーブルスペースを管理する必要はありません。
どちらを使用するよりも両方が可能である場合、その理由は何ですか?
それはあなた次第です。私の意見では、スキーマを別のテーブルスペースに配置すると、別のデータベースに簡単に転送できます。また、ポイントインタイムリカバリを実行することもできます。さらに、IOパフォーマンス要件に従って、このようなテーブルスペースを異なるディスクに配置できます。
更新
以下に示すように、ユーザー 'B'がユーザー 'C'にselecton viewを付与するには、ユーザーFOO
に付与オプションを指定してB
にselectを付与する必要があります。
SQL> conn a/a
Connected.
SQL> grant select on t1 to b with grant option;
Grant succeeded.
SQL> conn b/b
Connected.
SQL> create or replace view v_t1 as select * from a.t1;
View created.
SQL> grant select on v_t1 to c;
Grant succeeded.
SQL> conn c/c
Connected.
SQL> select * from b.v_t1;
ID
----------
1