2017-08-14 186 views
-1

即使已授予適當的訪問權限,但在執行包內的過程時,我的權限不足也會得到足夠的權限。包含alter table的ORACLE程序拋出ORA-01031:權限不足

CREATE OR REPLACE PACKAGE DEVELOPER.DDL_PACKS 
AS 
PROCEDURE disbcons 
AS 
    BEGIN 
    EXECUTE IMMEDIATE 'ALTER TABLE TESTER.ADDRESS DISABLE CONSTRAINT PK4'; 
    END; 
END; 

GRANT ALTER ON TESTER.ADDRESS TO DEVELOPER; 

EXEC developer.ddl.disbcons 

編輯: 我試圖在包報頭添加AUTHID DEFINER。但是,如果執行DEVELOPER,仍然會出現ORA-01031:insufficient privileges錯誤。用戶

如果我添加AUTHID CURRENT_USER並使用相同的DEVELOPER用戶執行,則執行效果很好。我不明白爲什麼當AUTHID DEFINER

+0

如何在程序包內添加'AUTHID DEFINER'程序? – Vivek

+0

[在存儲過程中立即執行的可能的重複不斷給予不足的特權錯誤](https://stackoverflow.com/questions/996198/execute-immediate-within-a-stored-procedure-keeps-giving-insufficient-priviliges) – lad2025

+0

@Vivek - 如果你的程序在一個包中,你只能在包級設置'AUTHID',而不是單獨的程序。 – kfinity

回答

0

執行@Vivek你可以包裝規格中添加AUTHID DEFINER/CURRENT_USER只,我想以後它會成功,Oracle不考慮相關的訪問,以下是你的包規範應該是:

CREATE OR REPLACE PACKAGE DEVELOPER.DDL_PACKS AUTHID CURRENT_USER 
AS 

    PROCEDURE disbcons; 

END; 
+0

它沒有什麼不同,因爲我已經用我創建包的用戶標識執行了。 – Vivek

+0

@Vivek你能告訴我什麼是用戶開發者的授權?例如用戶是否具有DBA角色?如果不是什麼? –

+0

@Vivek試用CURRENT_USER而不是DEFINER,它會工作 –