Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_view_rechte

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
prog:oracle_view_rechte [2018/06/15 08:20] – [Test über 2 Ebenen] gpipperrprog:oracle_view_rechte [2018/11/19 11:58] (aktuell) gpipperr
Zeile 1: Zeile 1:
 +===== Oracle - Über Views Zugriffsrechte auf Tabellen steuern- Problem ORA-01720: grant option does not exist for ====
 +
 +
 +<fc #800000>**Aufgabe**</fc>: 
 +
 +Über eine View einen dritten Daten zur Verfügung stellen, ohne Leserechte auf die eigentliche Basis Tabelle.
 +
 +
 +{{ :prog:oracle_view_select_rights.png?100 | Mit Views Rechte kapslen}}
 +
 +
 +Wir wollen erreichen, das DB Schema C nur die View in B lesen kann aber dafür KEINE Rechte auf die Basis Tabelle A benötigt!
 +
 +Granted der User A nur das Select Recht ganz normal an B und granted der User B das select Recht an der View an C funktioniert das nicht, da B das Leserecht auf A nicht weitergeben kann (ORA-01720: grant option does not exist for) !
 +
 +Dazu muss A dem User B das select Recht mit "with grant option" granten, ansonsten kann der User B das Lese Rechte auf C nicht weitergeben!
 +
 +<fc #008000>**Vorteil:**</fc>
 +
 + Nun kann der User C die Daten NUR über die View B lesen, in dieser View können wir z.b. die Daten dann noch weiter einschränken um zu verhindern, das C alles in A lesen kann. Stichwort Mandanden Fähigkeit !
 +
 +=== Test Beispiel ===
 +
 +Die User anlegen:
 +
 +<code sql>
 +--A
 +create user A identified by A;
 +grant connect to A;
 +grant create table to A;
 +grant unlimited tablespace to A;
 +
 +--B
 +create user B identified by B;
 +grant connect to B;
 +grant create View to B;
 +
 +--C
 +create user C identified by C;
 +grant connect to C;
 +
 +</code>
 +
 +Testcase 1
 +
 +User A:
 +<code sql>
 +connect a/A
 +
 +create table T as select * from all_objects;
 +grant select on T to B;
 +
 +select count(*) from b.v_t;
 +
 + COUNT(*)
 +---------
 +    57357
 +    
 +</code>
 +
 +User B:
 +<code sql>
 +connect b/B
 +create or replace view v_t as select * from A.t where owner='SYS';
 +grant select on v_t to c;
 +
 +ERROR at line 1:
 +ORA-01720: grant option does not exist for 'A.T'
 +
 +connect a/A
 +grant select on T to B with grant option;
 +
 +connect b/B
 +grant select on v_t to c;
 +</code>
 +
 +User C:
 +<code sql>
 +connect c/C
 +select count(*) from b.v_t;
 +
 + COUNT(*)
 +---------
 +    39401
 +    
 +select count(*) from a.t;
 +
 +ERROR at line 1:
 +ORA-00942: table or view does not exist
 +
 +</code>
 +
 +Damit haben wir den User C über die View fest eingeschränkt, er kann nur Daten lesen die ihm das Schema B zur Verfügung stellt.
 +
 +----
 +
 +----
 +
 +==== Test über 2 Ebenen ====
 +
 +Geht da auch über nur zwei Ebenen?
 +
 +
 +Das ganze funktioniert auch über zwei Ebenen, A hat eine Tabelle TT und legt eine View v_TT mit einem Filter Kriterium an. Die Rechte werden an den User B nur auf die View V_TT vergeben, der User B hat keine Rechte auf die Basis Tabelle TT!. Der User B kann nun NUR die Daten über die View lesen!
 +
 +Übersicht:
 +{{ :prog:oracle_view_select_rights_v2.png |}}
 +
 +
 +Test Case:
 +<code sql>
 +connect /  as sysdba
 +
 +grant create view to A
 +
 +connect a/A
 +
 +create table tt as select * from all_objects;
 +create or replace view v_tt as select * from TT where owner='SYS';
 +
 +grant select on v_tt to B;
 +
 +connect b/B
 +
 +select count(*) from a.v_tt;
 +
 +  COUNT(*)
 +----------
 +     39401
 +
 +SQL> select count(*) from a.TT;
 +select count(*) from a.TT
 +                       *
 +ERROR at line 1:
 +ORA-00942: table or view does not exist
 +
 +</code>
 +
 +In plsql verwenden funktioniert dann auch
 +<code sql>
 +connect b/B
 +SQL> declare
 +  2  v_count pls_integer;
 +  3  begin
 +  4  select count(*) into v_count from a.v_tt;
 +  5  end;
 +  6  /
 +
 +PL/SQL procedure successfully completed.
 +
 +</code>
 +
 +----
 +
 +====Quellen ====
 +
 +create view => 
 +https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/CREATE-VIEW.html#GUID-61D2D2B4-DACC-4C7C-89EB-7E50D9594D30
 +
  
prog/oracle_view_rechte.txt · Zuletzt geändert: 2018/11/19 11:58 von gpipperr