2016-12-19 1 views
2

権限付与者にすでにその表に対して選択権限がある場合に、ビューを使用する権限を付与できますか?つまり、権限付与者はビューの構造を使用できますが、ビュー所有者の権限ではなく、独自の基本的なテーブル権限を使用できますか?既存の表権限を持つユーザー間でのOracleビューの共有

たとえば、ユーザーA、B、およびCがあります。ユーザーAにはいくつかのテーブルがあります。ユーザーBとCは、現在、これらのテーブルに対して同じ選択権限を持っています。ユーザーBは、これらの表のビューを作成します。ユーザーCはそのビューを使用できますか?

注:BがBのアクセス許可で実行できるこれらのテーブルに対してBに「許可で選択」権限が与えられていても、Bがそのアクセス許可を前方に許可しないようにしたいと思います。自分の権限を既に持っているユーザーがビューの構造を使用できるようにしたいだけです。

コンテキスト:Aスキーマの一部のデータを使用して、Bスキーマに既に存在するビューを照会して、いくつかの特別な作業を行いたいと思います。これには、作業したいデータセットを保持するためのテーブルをいくつか作成する必要がありますが、私が作業している間はこれらのテーブルでBスキーマを混乱させたくありません。スキーマAのユーザーBの権限をCスキーマのすべてのユーザーBのビューを再作成することなくコピーするだけで、これをユーザーCとして行うことはできますか?これを行う簡単な方法はありますか?

答えて

2

短い答えは「いいえ」です。 documentation is quite clear

は、別のユーザーにビューに対するSELECT付与するには、いずれかのあなたは、ビューの基礎となるオブジェクトをすべて所有している必要があります。また、それらの基礎となるオブジェクトのすべてのGRANT OPTION付きのSELECTオブジェクト権限が付与されている必要があります。これは、権限受領者がすでにそれらの基礎となるオブジェクトに対してSELECT権限を持っていても当てはまります。

ここには実例があります。最初にグラント...

SQL> grant select on product to b; 

Grant succeeded. 

SQL> grant select on sales to b; 

Grant succeeded. 

SQL> grant select on product to c; 

Grant succeeded. 

SQL> grant select on sales to c; 

Grant succeeded. 

SQL> conn b/b 
Connected. 
SQL> select count(*) from a.sales; 

    COUNT(*) 
---------- 
     40 

SQL> conn c/c 
Connected. 
SQL> select count(*) from a.sales; 

    COUNT(*) 
---------- 
     40 

SQL> 

次に、Bのスキーマでビューを作成しましょう。

SQL> conn b/b 
Connected. 
SQL> create or replace view tot_product_sales as 
    2 select p.name as product_name 
    3   , sum(s.pieces) as units_sold 
    4   , sum(s.pieces * p.price) as turnover 
    5 from a.sales s 
    6   join a.product p on p.product_id = s.product_id 
    7 group by p.name 
    8/

View created. 

SQL> select * from tot_product_sales 
    2/

PRODUCT_NAME     UNITS_SOLD TURNOVER 
------------------------------ ---------- ---------- 
Mobile        1161  928800 
Laptop        970 1552485 

SQL> grant select on tot_product_sales to c; 
grant select on tot_product_sales to c 
       * 
ERROR at line 1: 
ORA-01720: grant option does not exist for 'A.PRODUCT' 


SQL> 

なぜOracleのセキュリティモデルは、これをするのでしょうか?それをこのように考える:GRANT SELECTは、Aのテーブル

  • with grant optionからAのデータで

    • 選択データを2つのことを行うために、ユーザBを可能にする、Aのテーブルからデータを選択するために、他のユーザーを許可
    • あり

    Bが特権を付与した他のユーザーを知る能力がBに与えられていません。したがって、BはAのスキーマにどのような特権があるかを知ることができません。

    解決方法?

    1. B(およびC)への付与select ... with grant option
    2. BとCはBとソリューションは、特定のシナリオに依存します最高のスーツ

    C

  • にAがその上に選択ビューや補助金を作成し、重複ビュー
  • を作成します。一般に、3番目のオプションは1つです。これは、データの特定のプレゼンテーションにいくつかのユースケースがある場合、データ所有者がそのプレゼンテーションを所有することに意味があるためです。他の時代には、いくつかのスキーマのデータを照合、集約、充実させる専用のレポートスキーマがありました。この場合、最初のオプションがその1つです。

    あなたの状況はどちらにも当てはまらないようで、スキーマCのビューを複製するのがベストネットです。

  • 関連する問題