web-dev-qa-db-ja.com

Oracleスキーマの付与と表領域

アプリケーションのデータが配置されているテーブルスペースを持つスキーマがあります。ここで、データを選択するためだけにアクセスできる別のスキーマが必要です。そのスキーマのビューのセットを作成したいと思います。

私の質問は次のとおりです。

  1. 同じテーブルスペースにスキーマを作成し、その許可を一部のビューのみに制限することは可能ですか(元のテーブルへのアクセスを許可しません)?

  2. そのスキーマ用に個別のテーブルスペースを作成し、それらの両方で機能するビューと付与を作成することは可能ですか?

  3. どちらを使用するよりも両方が可能である場合、およびその理由は何ですか?

前もって感謝します。

更新:

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に直接アクセスを許可する必要があるようですが、これではすべてのアイデアが失敗します。

1
pawel7318

同じテーブルスペースにスキーマを作成し、その許可を一部のビューのみに制限することは可能ですか(元のテーブルへのアクセスを許可しません)?

はい。また、懸念事項がこれらのテーブルへの読み取り専用アクセスのみに限定されている場合は、個別のビューを作成する必要もありません。新しいスキーマを作成して、それらのテーブルに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
1
JSapkota