2 我們知道,用戶擁有的role權限在存儲過程是不可用的。
我們知道,用戶擁有的role權限在存儲過程是不可用的。遇到這種情況,我們一般需要顯式授權,如grant create table to usera;但這種方法太麻煩,有時候可能需要進行非常多的授權才能執行存儲過程,實際上,Oracle給我們提供了在存儲過程中使用role權限的方法:修改存儲過程,加入Authid Current_User時存儲過程可以使用role權限。下面來舉個例子:
SQL> select * from v$version;BANNER----------------------------------------------------------------Oracle Database 10g EnterPRise Edition Release 10.2.0.1.0 - ProdPL/SQL Release 10.2.0.1.0 - ProductionCORE 10.2.0.1.0 ProductionTNS for 32-bit Windows: Version 10.2.0.1.0 - ProductionNLSRTL Version 10.2.0.1.0 - Production SQL> conn sjh/sjh已連接。SQL> create or replace procedure p_test 2 is 3 begin 4 execute immediate 'create table creat_table(id number)'; 5 end; 6 /過程已創建。 SQL> exec p_test;BEGIN p_test; END;*第 1 行出現錯誤:ORA-01031: 權限不足ORA-06512: 在 "SJH.P_TEST", line 4ORA-06512: 在 line 1SQL>SQL> select * from dba_role_privs where grantee='SJH';GRANTEE GRANTED_ROLE ADM DEF------------------------------ ------------------------------ --- ---SJH RESOURCE NO YES --實際上SJH用戶有resource的角色,也就是說有建表的權限。 SQL> select * from dba_role_privs where grantee='SFX';GRANTEE GRANTED_ROLE ADM DEF------------------------------ ------------------------------ --- ---SFX RESOURCE NO YESSFX CONNECT NO YESSFX PLUSTRACE NO YES SQL> create or replace procedure p_test 2 Authid Current_User 3 is 4 begin 5 execute immediate 'create table creat_table(id number)'; 6 end; 7 /過程已創建。 SQL> exec p_test;PL/SQL 過程已成功完成。 SQL> select * from creat_table;未選定行 --在存儲過程加了Authid Current_User選項,表建立成功。新聞熱點
疑難解答