在儲存過程中使用EXECUTE IMMEDIATE報許可權問題
EXECUTE IMMEDIATE是Oracle中使用動態SQL的一種方法,可以直接執行,也可以在儲存過程中呼叫。可是我今天在儲存過程中呼叫時遇到許可權不足的問題,然而吧該語句單獨提取到匿名塊中執行完全沒問題:
declare
-- Local variables here
v_tempname varchar2(10);
v_sourcename varchar2(50);
createtmp varchar2(100);
begin
-- Test statements here
v_tempname:='ttt1';
v_sourcename:='user_tables';
createtmp:='CREATE TABLE '||v_tempname||' AS ' --建立一個與被抽取物件dfr_trade_type表相同表結構的temp表
||'SELECT * FROM '||v_sourcename||' WHERE 1=2';
EXECUTE IMMEDIATE createtmp; --放這裡執行正常,放儲存過程裡就有問題了
end;
查了下當前使用者的角色和許可權:
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE GRANTED
----------------- ------------------------------ -------------------- ------------------------ ---------------
ZY CONNECT YES YES NO
ZY DBA YES YES NO
ZY RESOURCE YES YES NO
本人還是dba角色呢,居然在儲存過程裡建立個table還被管著,氣氛!於是帶著不服的心理在網上查個究竟:
原來是因為預設情況下,資料庫對儲存過程在編譯階段進行許可權檢測,資料庫檢測儲存過程的所有者是否擁有直接賦予的許可權,而不是透過一個角色等間接賦予的許可權。但是在建立儲存過程的時候使用了AUTHID CURRENT_USER這個選項,那麼語句執行的許可權將在執行過程中根據執行者的許可權進行判斷。
解決的方法有兩個:一是直接授權使用者DDL許可權,二是使用AUTHID CURRENT_USER選項。
於是我將create anly table的許可權賦予zy使用者試了下:
SQL> grant create any table to zy;
Grant succeeded
ok啦!
所以,如果在儲存過程中呼叫EXECUTE IMMEDIATE出現“許可權不足”問題,就需要賦予使用者更多的許可權,比如說在儲存過程中建立或修改觸發器遇到“許可權不足”,就應該執行:
GRANT CREATE ANY TRIGGER TO SCOTT
其他情況也是一樣的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12615085/viewspace-675026/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- EXECUTE IMMEDIATE 儲存過程中 許可權不足及EXECUTE IMMEDIATE的除錯避坑儲存過程除錯
- 儲存過程中慎用 execute immediate儲存過程
- ORACLE中儲存過程的許可權問題Oracle儲存過程
- MySQL儲存過程的許可權問題MySql儲存過程
- 呼叫者儲存過程訪問許可權問題儲存過程訪問許可權
- 儲存過程與許可權儲存過程
- 儲存過程中使用Dbms_Scheduler包的許可權問題儲存過程
- 儲存過程執行EXECUTE IMMEDIATE沒反應儲存過程
- 儲存過程與許可權(二)儲存過程
- mysql儲存過程的許可權 definerMySql儲存過程
- 資料庫許可權-儲存過程資料庫儲存過程
- MYSQL儲存過程許可權問題分析(Security_type詳解)MySql儲存過程
- 關於檢視和儲存過程的許可權問題探究儲存過程
- 儲存過程,角色相關的呼叫者許可權和定義者許可權問題儲存過程
- 【許可權】儲存過程執行時,報ORA-01031許可權不足儲存過程
- 如何在儲存過程中擁有role的許可權儲存過程
- oracle儲存過程許可權繼承小結Oracle儲存過程繼承
- 儲存過程許可權__Authid Current_User儲存過程
- all許可權使用者無法執行儲存過程儲存過程
- 檢視、儲存過程以及許可權控制練習儲存過程
- 讓使用者擁有儲存過程的除錯許可權儲存過程除錯
- EXECUTE IMMEDIATE 呼叫動態過程
- win10 儲存excel報錯 許可權問題怎麼解決Win10Excel
- 儲存過程問題。。儲存過程
- 解決執行儲存過程出現許可權不足問題(ORA-01031)儲存過程
- java儲存過程呼叫servlet的授權問題Java儲存過程Servlet
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- Oracle在儲存過程中呼叫其他使用者的表授權Oracle儲存過程
- Vim儲存時許可權不足
- 定義者許可權儲存過程role無效,必須要有顯式授權儲存過程
- hadoop命令報錯:許可權問題Hadoop
- ASM中磁碟組許可權問題ASM
- MySQL儲存過程中的sql_mode問題MySql儲存過程
- MySQL許可權問題MySql
- 一個儲存過程的問題!儲存過程
- 儲存過程單引號問題儲存過程
- 在儲存過程中寫truncate table儲存過程
- 在Entity Framework中使用儲存過程Framework儲存過程