2013-07-13 19 views

Trả lời

14

Khi một đối tượng bị xóa mọi thứ liên quan đến nó cũng bị loại bỏ, bao gồm cả các đặc quyền. Điều này không đúng với TẠO HOẶC THAY THẾ.

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

Có thể sai nhưng lịch sử kiểm tra cũng được duy trì? – Rob

4

Tôi tin rằng nếu bạn thay thế một hàm, đặc quyền vẫn nguyên vẹn, mặc dù tôi thường tạo các từ đồng nghĩa công khai và cấp đặc quyền cho những từ đó.

The docs say:

REPLACE là một từ khóa không bắt buộc sử dụng trong định nghĩa đối tượng (DDL) để override định nghĩa Objet cũ với một cái mới. Nó giữ lại các đặc quyền truy cập của đối tượng trong quá trình sửa đổi định nghĩa . Tuy nhiên, nếu đối tượng bị rớt và tái tạo, các đặc quyền sẽ bị mất.

Các vấn đề liên quan