ORACLE存儲過程以及定時任務動態執行SQL權限不足問題,報錯ORA-01031

問題描述:在開發存過的時候,PL/SQL塊裏有動態SQL語句,正常可以執行。

          但是放到存儲過程裏會報ORA-01031:insufficient privileges錯誤。

          

          經查詢原因是塊裏具有動態SQL語句( execute immediate SQL),

          而且動態SQL語句只能通過對象賦權(例:CREATE TABLE),不識別角色賦權(例:DBA)。



解決方法:1.建立存過時加入 ’AUTHID current_user‘關鍵字,賦予存過調用者權限。

                    

備註:對於pl/sql子程序的調用來說,具有兩種方式:定義者權限和調用者權限。

2.顯示賦權。

該存過下動態執行的SQL語句涉及到建立表、刪除表數據等操作需要顯示賦權(即直接將對象賦給該用戶,而不是將

角色賦給該用戶)。


而通過第一種方法解決後,雖然存過可以正常運行,但是放到定時任務(job)裏還是會報權限不足的錯誤,此時用第二種方法解決即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章