2016-04-26 1 views
0

In Oracle benötigen Benutzer nur Berechtigungen für die Sicht, um aus ihr SELECT zu wählen, genauer gesagt, was die Sicht aus der Tabelle sieht. Privilegien auf dem Tisch sind nicht erforderlich.Umgehung der Tabellenberechtigung und WITH GRANT OPTION durch Erstellen von Ansichten

Lassen Sie uns dieses Szenario vor:

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 

Nach der obigen Regel C der Lage sein, sich von V zu wählen, also äquivalent von T. auf die Auswahl ist diese Art von Betrug? B lässt C effektiv A sehen, obwohl C nicht das Recht auf T hat und B keine GRANT OPTION hat. Gibt es irgendwo ein Sicherheitsloch?

+0

A möchte nicht, dass jemand anderes T außer B abfragt, also gibt er B WITH GRANT OPTION nicht. Aber durch das Erstellen einer Sichtweise gibt B alle Informationen an C und an alle anderen, wodurch A effektiv betrogen wird. Darüber hinaus, wenn C eine andere Sichtweise auf V erstellt und dasselbe tut, sieht schließlich jeder, was A zu verbergen versuchte. – Kenny

Antwort

4

Was Sie beschrieben haben, funktioniert nicht. Als Benutzer A:

create table t (id number); 

Table T created. 

grant select on t to b; 

Grant succeeded. 

als Benutzer B:

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. 

Diese in the documetation erwähnt wird:

Hinweis:
Um zu einem anderen Benutzer SELECT auf einen Blick zu gewähren, entweder Sie müssen alle Objekte besitzen, die der Sicht zugrunde liegen, oder Sie müssen das SELECT-Objekt-Privileg WITH GRANT OPTION für alle diese Underlyi erhalten haben ng Objekte. Dies gilt auch dann, wenn der Berechtigungsempfänger bereits SELECT-Berechtigungen für diese zugrunde liegenden Objekte besitzt.

Auch das Privileg grant any object privilege übergeht dies nicht; obwohl es ein (mächtiges) Privileg geben muss, das wie ein vollständiger DBA tun kann grant select on b.v to c.

+0

Danke Alex. Das ist eine ganz besondere Regel. – Kenny

Verwandte Themen