oracle-存儲過程提示ORA-01031: 權限不足


用戶具有dba權限,但在執行一個存儲過程時提示“ORA-01031: 權限不足”,該過程中存在動態SQL“execute immediate。。。”正是這里報的錯誤。

1、ORACLE默認為定義者權限,定義者權限在存儲過程中ROLE無效,需要顯示授權。
2、如果使用AUTHID CURRENT_USER關鍵字使用調用者權限,則編譯時ROLE無效,運行時有效。

解決辦法:

方法1:就這個存儲過程來說,CREATE TABLE想使用CREATE ANY TABLE權限,而CREATE ANY TABLE權限來自DBA角色,默認情況下,雖然在會話環境中可見,但在存儲過程中不可見(無效)。
所以根據上面的第一條規則,可以顯示地將CREATE ANY TABLE權限授予cog就可以了,即
GRANT CREATE ANY TABLE TO COG;

方法2:采用調用者權限,由於過程中使用動態SQL,所以可以避開編譯時的檢查,但在運行時DBA角色生效,即

CREATE OR REPLACE PROCEDURE INSERT_DATA --插入user_客戶ID,套餐表,客戶寬表
(RTN_ID OUT NUMBER, --返回錯誤ID
 RTN_STR OUT VARCHAR --返回錯誤敘述
 ) AUTHID CURRENT_USER IS
...................

參見:http://bbs.csdn.net/topics/360200923


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM