2013-07-13 5 views

risposta

14

Quando un oggetto viene rilasciato, anche tutti gli elementi associati vengono eliminati, inclusi i privilegi. Questo non è vero per CREATE OR REPLACE.

SQL> create procedure p1 is 
    2 begin 
    3  null; 
    4 end; 
    5/

Procedure created. 

SQL> grant execute on p1 to xyz; 

Grant succeeded. 

SQL> select * from user_tab_privs_made 
    2/

GRANTEE      TABLE_NAME      GRANTOR      PRIVILEGE      GRA HIE 
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --- --- 
XYZ       P1        APC       EXECUTE      NO NO 

SQL> create or replace procedure p1 is 
    2 n pls_integer; 
    3 begin 
    4 n := 1; 
    5 end; 
    6/

Procedure created. 

SQL> select * from user_tab_privs_made 
    2/

GRANTEE      TABLE_NAME      GRANTOR      PRIVILEGE      GRA HIE 
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --- --- 
XYZ       P1        APC       EXECUTE      NO NO 

SQL> drop procedure p1; 

Procedure dropped. 

SQL> create or replace procedure p1 (p in out pls_integer) is 
    2 begin 
    3 p := p+1; 
    4 end; 
    5/

Procedure created. 

SQL> select * from user_tab_privs_made 
    2/

no rows selected 

SQL> 
+0

Potrebbe non essere corretto ma la cronologia di controllo è stata mantenuta anche? – Rob

4

Credo che se si sostituisce una funzione, i privilegi rimangono intatti, anche se io di solito piace creare sinonimi pubblici e privilegi concedere a quelli.

The docs say:

Replace è una parola chiave opzionale utilizzato in definizioni di oggetti (DDL) per sostituzione della definizione objet vecchio con uno nuovo. Conserva i privilegi di accesso dell'oggetto durante la procedura di modifica delle definizioni . Se l'oggetto viene eliminato e ricreato, tuttavia, i suoi privilegi sono persi.

Problemi correlati