在儲存過程中使用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的除錯避坑儲存過程除錯
- MySQL儲存過程的許可權問題MySql儲存過程
- 如何在儲存過程中擁有role的許可權儲存過程
- oracle儲存過程許可權繼承小結Oracle儲存過程繼承
- all許可權使用者無法執行儲存過程儲存過程
- 檢視、儲存過程以及許可權控制練習儲存過程
- win10 儲存excel報錯 許可權問題怎麼解決Win10Excel
- Vim儲存時許可權不足
- 在Entity Framework中使用儲存過程Framework儲存過程
- MySQL許可權問題MySql
- [20210426]execute immediate.txt
- 儲存過程訪問其他使用者的表的問題儲存過程
- 達夢儲存過程效能問題定位儲存過程
- mysql多次呼叫儲存過程的問題MySql儲存過程
- 記一個 Android 14 適配引發的Android 儲存許可權問題Android
- MySQL儲存過程中如何使用ROLLBACKMySql儲存過程
- Centos sudo 許可權問題CentOS
- jdbc使用call呼叫儲存過程報錯JDBC儲存過程
- 不同使用者python path 許可權問題Python
- 許可權的級聯問題
- Ubuntu 下 Composer 許可權問題Ubuntu
- autohotkey透過com物件控制excel的許可權問題物件Excel
- PetaPoco在.net專案中的簡單使用(儲存過程篇)儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- Sqlserver中的儲存過程SQLServer儲存過程
- jsp中呼叫儲存過程JS儲存過程
- 教程示例:控制儲存空間和資料夾的訪問許可權訪問許可權
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- windows下程式設計中的多使用者、許可權問題Windows程式設計
- Mysql資料庫許可權問題MySql資料庫
- hdfs檔案本地許可權問題
- Laravel Daily 日誌許可權問題LaravelAI
- jenkins 容器內的許可權問題Jenkins
- vue許可權問題解決方案Vue
- sqlserver 賦予許可權的問題SQLServer
- 低權使用者呼叫高權使用者建立的儲存過程出錯儲存過程
- k8s結合jumpserver做kubectl許可權控制 使用者在多個namespaces的訪問許可權 rbac許可權控制K8SServernamespace訪問許可權
- Laravel 中使用 MySQL 儲存過程LaravelMySql儲存過程
- 使用nginx控制ElasticSearch訪問許可權NginxElasticsearch訪問許可權