2013-07-13 27 views

回答

14

當一個對象被丟棄時,與它關聯的所有東西都會被丟棄,包括特權。 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

可能是錯的,但審計歷史是否也維護? – Rob

4

如果要更換功能,我相信,特權保持不變,雖然我平時喜歡創建公共同義詞和權限授予那些。

The docs say

REPLACE是在對象定義(DDL)用於 覆蓋舊的客體定義一個新的可選關鍵字。它在定義修改 過程中保留對象的 訪問權限。如果該對象被刪除並重新創建,但是,其 權限會丟失。

相關問題