两者有什么区别?在这两种情况下?授予此功能的权限会发生什么情况?在这两种情况下都会自动撤销,并且必须在重新创建时再次提供?请解释。
问问题
4755 次
2 回答
15
当一个对象被删除时,与它相关的所有东西都会被删除,包括特权。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>
于 2013-07-13T09:55:12.770 回答
4
我相信如果你替换一个函数,特权会保持不变,尽管我通常喜欢创建公共同义词并授予它们特权。
文档说:
REPLACE 是在对象定义 (DDL) 中使用的可选关键字,用于用新的对象定义覆盖旧的对象定义。它在定义修改过程中保留对象的访问权限。但是,如果删除并重新创建对象,则其权限将丢失。
于 2013-07-13T09:56:51.540 回答