Oracle預存程序中提示“許可權不足”的解決辦法

來源:互聯網
上載者:User

我們知道,使用者擁有的role許可權在預存程序是停用。如:
SQL> select * from dba_role_privs where grantee='SUK';
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
------------ ------------ ------------ ------------
SUK DBA NO YES
SUK CONNECT NO YES
SUK RESOURCE NO YES
--使用者SUK擁有DBA這個role
--再建立一個測試預存程序:
create or replace procedure p_create_table
is
begin
Execute Immediate 'create table create_table(id int)';
end p_create_table;
--然後測試
SQL> exec p_create_table;
begin p_create_table; end;
ORA-01031: 許可權不足
ORA-06512: 在"SUK.P_CREATE_TABLE", line 3
ORA-06512: 在line 1
--可以看到,即使擁有DBA role,也不能建立表。role在預存程序中不可用。
--遇到這種情況,我們一般需要顯式進行系統許可權,如grant create table to suk;
--但這種方法太麻煩,有時候可能需要進行非常多的授權才能執行預存程序
--實際上,Oracle給我們提供了在預存程序中使用role許可權的方法:
--修改預存程序,加入Authid Current_User時預存程序可以使用role許可權。
create or replace procedure p_create_table
Authid Current_User is
begin
Execute Immediate 'create table create_table(id int)';
end p_create_table;
--再嘗試執行:
SQL> exec p_create_table;
PL/SQL procedure successfully completed
--已經可以執行了。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.