2016-04-26 11 views
0

Oracleでは、ユーザーはビューからビューを選択できるようにするために、ビューに対する権限しか必要としません。表に対する特権は必要ありません。ビューを作成してバイパス・テーブル権限とWITH GRANT OPTIONを作成する

のは、このシナリオを考えてみましょう:

Table T belongs to A 
A GRANT SELECT ON T to B (without GRANT OPTION) 
B CREATE VIEW V AS SELECT * FROM A.T 
B GRANT SELECT ON V TO C 
C performing SELECT * FROM B.V 

上記のルールによると、CはVから選択することができます、したがって、T.から選択することと同じで不正行為のようなものですか? Bは事実上CにA.Tを見せているが、CはTに権利がなく、BにはGRANT OPTIONはない。どこかにセキュリティホールはありますか?

+0

Aは、他の誰かがBを除いてTを照会することを望んでいないので、Bには与えられたオプションを与えません。しかし、ビューBを作成することで、Cと他のすべての情報にすべての情報が与えられ、Aで効果的に不正行為が行われます。さらに、CがVの別のビューを作成して同じことをした場合、最終的に誰もAを隠そうとします。 – Kenny

答えて

4

あなたの説明はうまくいきません。ユーザーBとして

create table t (id number); 

Table T created. 

grant select on t to b; 

Grant succeeded. 

:ユーザAとして

create view v as select * from a.t; 

View V created. 

grant select on v to c; 

SQL Error: ORA-01720: grant option does not exist for 'A.T' 
01720. 00000 - "grant option does not exist for '%s.%s'" 
*Cause: A grant was being performed on a view or a view was being replaced 
      and the grant option was not present for an underlying object. 
*Action: Obtain the grant option on all underlying objects of the view or 
      revoke existing grants on the view. 

これはin the documetationに記載されている:

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

さらに、grant any object privilege権限もこれをバイパスしません。完全なDBAとして機能する(強力な)特権が必要ですが、を実行するとgrant select on b.v to cとなります。

+0

アレックスに感謝します。それは非常に特別なルールです。 – Kenny

関連する問題