ORACLE 儲存過程中的Authid Current_User
ORACLE使用者具有DBA許可權,卻會出現無法在儲存過程裡面建立一張普通表的現象。因為即使使用者擁有DBA許可權,使用者擁有的role許可權在儲存過程是不可用的。
遇到這種情況,通常解決方法是進行顯式的許可權分配: grant create table to user a;
但這種方法太麻煩,因為有可能執行一個儲存過程,需要很多不同許可權。
實際上,oracle給我們提供了在儲存過程中使用role許可權的方法:修改儲存過程,加入Authid Current_User進行許可權分配。
在ORACLE8i以前的版本,所有已編譯儲存物件,包括packages, procedures, functions, triggers, views等,只能以定義者(Definer)身份解析執行;
而ORACLE8i及其後的新版本,Oracle引入呼叫者(invoker)許可權,使得物件可以以呼叫者身份和許可權執行。
目前ORACLE儲存過程預設都是使用定義者許可權呼叫,以定義者身份執行;而宣告Authid Current_User後則就是呼叫者許可權,以呼叫者身份執行。
定義者許可權:如果在user a下建立的procedure,那其他user只要能執行procedure,這個procedure所做的內容都是以user a的名義來執行的。因為user a是procedure的定義者。user a能做什麼,那這個procedure就能做什麼。
呼叫者許可權:如果在user a下建立的procedure,那其他user只要能執行procedure,這個procedure所做的內容都是以當前user的名義來做的。如果某個table只有user a有許可權建,那這個procedure在user a下面才執行成功。其他user下是不成功的。
而Authid Current_User即是以擁有當前會話許可權、以執行過程的使用者的許可權來處理涉及的物件許可權。
在Oracle的儲存過程中,如果涉及到操作不同schema下的物件的時候,可以在不同的schema下寫相同的procedure,但這樣帶來的問題是維護和同步麻煩,
在procedure中加上authid current_user,來說明procedure中操作的物件是當前連線使用者的物件而並不是procedure所屬使用者下的物件。
但如果該過程的呼叫者(而非定義者)被授與系統許可權execute any procedure 或是被該過程的定義者grant execute on授權的話,不用authid current_user子句,呼叫者照樣可以使用這個過程。
遇到這種情況,通常解決方法是進行顯式的許可權分配: grant create table to user a;
但這種方法太麻煩,因為有可能執行一個儲存過程,需要很多不同許可權。
實際上,oracle給我們提供了在儲存過程中使用role許可權的方法:修改儲存過程,加入Authid Current_User進行許可權分配。
在ORACLE8i以前的版本,所有已編譯儲存物件,包括packages, procedures, functions, triggers, views等,只能以定義者(Definer)身份解析執行;
而ORACLE8i及其後的新版本,Oracle引入呼叫者(invoker)許可權,使得物件可以以呼叫者身份和許可權執行。
目前ORACLE儲存過程預設都是使用定義者許可權呼叫,以定義者身份執行;而宣告Authid Current_User後則就是呼叫者許可權,以呼叫者身份執行。
定義者許可權:如果在user a下建立的procedure,那其他user只要能執行procedure,這個procedure所做的內容都是以user a的名義來執行的。因為user a是procedure的定義者。user a能做什麼,那這個procedure就能做什麼。
呼叫者許可權:如果在user a下建立的procedure,那其他user只要能執行procedure,這個procedure所做的內容都是以當前user的名義來做的。如果某個table只有user a有許可權建,那這個procedure在user a下面才執行成功。其他user下是不成功的。
而Authid Current_User即是以擁有當前會話許可權、以執行過程的使用者的許可權來處理涉及的物件許可權。
在Oracle的儲存過程中,如果涉及到操作不同schema下的物件的時候,可以在不同的schema下寫相同的procedure,但這樣帶來的問題是維護和同步麻煩,
在procedure中加上authid current_user,來說明procedure中操作的物件是當前連線使用者的物件而並不是procedure所屬使用者下的物件。
但如果該過程的呼叫者(而非定義者)被授與系統許可權execute any procedure 或是被該過程的定義者grant execute on授權的話,不用authid current_user子句,呼叫者照樣可以使用這個過程。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2135496/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle儲存過程中authid current_user和authid definerOracle儲存過程
- 儲存過程許可權__Authid Current_User儲存過程
- job中呼叫儲存過程,儲存過程使用AUTHID CURRENT_USER,還出現ORA-01031儲存過程
- Oracle:Authid Current_User的使用(轉)Oracle
- oracle儲存過程中的陣列Oracle儲存過程陣列
- oracle的儲存過程Oracle儲存過程
- java中呼叫ORACLE儲存過程JavaOracle儲存過程
- ORACLE儲存過程中建立子過程的測試!Oracle儲存過程
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- Oracle儲存過程Oracle儲存過程
- Oracle 儲存過程中的DDL語句Oracle儲存過程
- oracle 儲存過程中螢幕列印Oracle儲存過程
- Jsp中呼叫Oracle儲存過程JSOracle儲存過程
- oracle的儲存過程格式Oracle儲存過程
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- Oracle儲存過程-1Oracle儲存過程
- Oracle儲存過程例子Oracle儲存過程
- Oracle建立儲存過程Oracle儲存過程
- oracle plsql儲存過程OracleSQL儲存過程
- ORACLE 儲存過程示例Oracle儲存過程
- Sqlserver中的儲存過程SQLServer儲存過程
- 儲存過程中巢狀儲存過程的變數執行方式儲存過程巢狀變數
- Oracle儲存過程中跳出迴圈的寫法Oracle儲存過程
- Oracle中定義package以及儲存過程的使用OraclePackage儲存過程
- ORACLE中儲存過程的許可權問題Oracle儲存過程
- 原創:oracle 儲存過程Oracle儲存過程
- oracle 儲存過程批次提交Oracle儲存過程
- oracle 儲存過程學習Oracle儲存過程
- [Flashback]Oracle flashback儲存過程Oracle儲存過程
- Oracle儲存過程學習Oracle儲存過程
- java 呼叫oracle 儲存過程JavaOracle儲存過程
- oracle--08儲存過程Oracle儲存過程
- PB中呼叫儲存過程儲存過程
- 儲存過程中拼接字串儲存過程字串
- java中呼叫儲存過程Java儲存過程
- AUTHID DEFINER\authid current_user與alter session set current_schemaSession
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程