呼叫者儲存過程訪問許可權問題
一直認為呼叫者許可權過程所參考的物件是呼叫者使用者下的物件,所依賴的許可權也是呼叫者擁有的許可權,但是現在發現事實並非完全如此。
事實上這個觀點對於表、檢視是正確的,呼叫者許可權儲存過程訪問的表和檢視是呼叫者當前使用者下的,且許可權都來自呼叫者本身。
但是對於儲存過程,卻是個例外,呼叫者許可權儲存過程中呼叫的OWNER使用者下的儲存過程,對於呼叫者而言,即使沒有許可權也是可以訪問的。
描述有點抽象,看一個簡單的例子:
SQL> CONN SYSTEM/MANAGER
已連線。
SQL> CREATE USER U1 IDENTIFIED BY U1 DEFAULT TABLESPACE USERS;
使用者已建立。
SQL> GRANT CREATE SESSION TO U1;
授權成功。
SQL> CONN TEST/TEST
已連線。
SQL> CREATE OR REPLACE PROCEDURE P_1 AUTHID CURRENT_USER AS
2 BEGIN
3 NULL;
4 END;
5 /
過程已建立。
SQL> CREATE OR REPLACE PROCEDURE
P_2 AUTHID CURRENT_USER AS
2 BEGIN
3 P_1;
4 END;
5 /
過程已建立。
SQL> GRANT EXECUTE ON P_2 TO U1;
授權成功。
SQL> CONN U1/U1
已連線。
SQL> EXEC TEST.P_1
BEGIN TEST.P_1; END;
*
第 1 行出現錯誤:
ORA-06550: 第 1 行, 第 7 列:
PLS-00201: 必須宣告識別符號 'TEST.P_1'
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
SQL> EXEC TEST.P_2
PL/SQL 過程已成功完成。
建立一個只有CREATE SESSION許可權的使用者。在另外一個使用者下,建立兩個呼叫者許可權的儲存過程,其中P_2呼叫P_1。將儲存過程P_2的執行許可權授權給P_1。用新建立的使用者登入,可以看到,使用者沒有許可權執行P_1,但是使用者可以執行P_2,這意味著使用者透過P_2的執行許可權,呼叫了儲存過程OWNER使用者下呼叫者本沒有許可權的儲存過程P_1。
這對於定義者許可權儲存過程是順理成章的,但是對於呼叫者儲存過程而言,物件的訪問許可權是在呼叫時判斷,因此由呼叫者確定訪問的物件和許可權。沒有想到,Oracle這裡的物件的範圍並不包含儲存過程。
第一個過程是否是呼叫者許可權並不重要,將其改為定義者許可權,結果依舊:
SQL> CONN TEST/TEST
已連線。
SQL> CREATE OR REPLACE PROCEDURE P_1 AS
2 BEGIN
3 NULL;
4 END;
5 /
過程已建立。
SQL> CREATE OR REPLACE PROCEDURE
P_2 AUTHID CURRENT_USER AS
2 BEGIN
3 P_1;
4 END;
5 /
過程已建立。
SQL> CONN U1/U1
已連線。
SQL> EXEC TEST.P_2
PL/SQL 過程已成功完成。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-718284/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 儲存過程,角色相關的呼叫者許可權和定義者許可權問題儲存過程
- MySQL儲存過程的許可權問題MySql儲存過程
- ORACLE中儲存過程的許可權問題Oracle儲存過程
- 在儲存過程中使用EXECUTE IMMEDIATE報許可權問題儲存過程
- MYSQL儲存過程許可權問題分析(Security_type詳解)MySql儲存過程
- 關於檢視和儲存過程的許可權問題探究儲存過程
- 儲存過程中使用Dbms_Scheduler包的許可權問題儲存過程
- 儲存過程與許可權儲存過程
- 儲存過程與許可權(二)儲存過程
- mysql儲存過程的許可權 definerMySql儲存過程
- 資料庫許可權-儲存過程資料庫儲存過程
- 儲存過程問題。。儲存過程
- oracle儲存過程許可權繼承小結Oracle儲存過程繼承
- 儲存過程許可權__Authid Current_User儲存過程
- java儲存過程呼叫servlet的授權問題Java儲存過程Servlet
- Ubuntu共享資料夾訪問許可權問題Ubuntu訪問許可權
- 解決執行儲存過程出現許可權不足問題(ORA-01031)儲存過程
- 呼叫者許可權過程對OWNER物件的依賴物件
- 儲存過程訪問其他使用者的表的問題儲存過程
- java的訪問許可權Java訪問許可權
- 檢視、儲存過程以及許可權控制練習儲存過程
- 教程示例:控制儲存空間和資料夾的訪問許可權訪問許可權
- MySQL許可權問題MySql
- Java 訪問許可權控制(6)Java訪問許可權
- mongoDB 3.0 安全許可權訪問MongoDB
- Swift4.0 訪問許可權Swift訪問許可權
- AndroidPermission訪問許可權大全Android訪問許可權
- public, private, protected 訪問許可權訪問許可權
- 【許可權】儲存過程執行時,報ORA-01031許可權不足儲存過程
- 如何在儲存過程中擁有role的許可權儲存過程
- Swift 中 Selector 方法的訪問許可權控制問題Swift訪問許可權
- 一個儲存過程的問題!儲存過程
- 儲存過程單引號問題儲存過程
- 採坑之Android手機訪問相簿許可權問題Android
- all許可權使用者無法執行儲存過程儲存過程
- android 許可權問題Android
- SQL Server許可權問題SQLServer
- 使用nginx控制ElasticSearch訪問許可權NginxElasticsearch訪問許可權