两者有什么区别?在这两种情况下?在此功能上授予的权限会发生什么?在两种情况下都会自动撤销,并且在重新创建时必须再次提供吗?请解释一下。
答案 0 :(得分:14)
删除对象时,与其关联的所有内容也会被删除,包括权限。创建或替换不是这样。
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>
答案 1 :(得分:4)
我相信如果你更换一个功能,权限保持不变,虽然我通常喜欢创建公共同义词并授予权限。
REPLACE是对象定义(DDL)中使用的可选关键字 使用新的objet定义覆盖旧的objet定义。它保留了 在定义修改期间访问对象的权限 处理。但是,如果删除并重新创建对象,则为其 特权丢失了。