procedure建立和執行的顯示賦權

psufnxk2000發表於2013-09-08
song,user1,user2 都有dba的角色

一, 執行sys下的 procedure時 ,必須顯示賦權  grant execute on procedure_name to user_name;  
二, 在sys下, 不需要被顯示賦於對像的許可權。 別的使用者需要
三, 執行別的使用者(不包括sys)下的procedure時, 不需要執行使用者的顯示的賦權  

證明:
SQL> conn /as sysdba
Connected.
SQL> create or replace procedure t_pro as 
  2  begin
  3  null;
  4  insert into user1.t_t values ('a');
  5  end;
  6  /

Procedure created.       --sys使用者 不需要 被顯示給user1.t_t的許可權

SQL> grant dba to song;

Grant succeeded.

SQL> conn song/song
Connected.
SQL> exec sys.t_pro;
BEGIN sys.t_pro; END;     --song執行sys的, 執行不了,但是報的錯不是沒有許可權

      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'SYS.T_PRO' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored



SQL> conn /as sysdba
Connected.
SQL> exec sys.t_pro;

PL/SQL procedure successfully completed.

SQL> show user
USER is "SYS"

SQL> grant execute any procedure to song;         --給執行任何procedure的許可權 

Grant succeeded.

SQL> conn song/song
Connected.
SQL> exec sys.t_pro;
BEGIN sys.t_pro; END;            --還是執行不了,(可以認為給的any procedure不包含sys下的物件)

      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'SYS.T_PRO' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


SQL> conn /as sysdba
Connected.
SQL> grant execute on t_pro to song;         --顯示賦於執行許可權

Grant succeeded.

SQL> conn song/song
Connected.
SQL> exec sys.t_pro;                         --成功

PL/SQL procedure successfully completed.



SQL> conn song/song
Connected.
SQL> create or replace procedure t_pro_song as 
  2  begin
  3  null;
  4  insert into user1.t_t values ('b');
  5  end;
  6  /

Warning: Procedure created with compilation errors.           

SQL> show error
Errors for PROCEDURE T_PRO_SONG:

LINE/COL ERROR
-------- -----------------------------------------------------------------
4/1      PL/SQL: SQL Statement ignored
4/19     PL/SQL: ORA-01031: insufficient privileges         --有dba許可權也用不了user1的t_t表
SQL> conn user1/user1
Connected.
SQL> grant insert on t_t to song;

Grant succeeded.

SQL> conn song/song
Connected.
SQL> create or replace procedure t_pro_song as 
  2  begin
  3  null;
  4  insert into user1.t_t values ('b');
  5  end;
  6  /

Procedure created.                                         --顯示給許可權之後,可以

SQL> conn user2/user2
Connected.
SQL> exec song.t_pro_song;         --user2 雖沒有顯示賦權,但是可以執行

PL/SQL procedure successfully completed.


SQL> select * from user1.t_t;

NAME
----------
user1
a
a
b

SQL> conn song/song
Connected.
SQL> create or replace procedure t_pro_song_a AUTHID CURRENT_USER as         --以AUTHID CURRENT_USER 定義,下面還是可以執行
  2  begin
  3  null;
  4  insert into user1.t_t values ('b');
  5  end;
  6  /

Procedure created.

SQL> conn user2/user2
Connected.
SQL> exec song.t_pro_song_a;

PL/SQL procedure successfully completed.

SQL> select * from user1.t_t;

NAME
----------
user1
a
a
b
b

by song

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25099483/viewspace-772367/,如需轉載,請註明出處,否則將追究法律責任。

相關文章