儲存過程與許可權(二)

LuiseDalian發表於2014-01-15
2.呼叫者許可權,AUTHID CURRENT_USER

儲存過程有編譯和執行2個階段。

從編譯階段來看,呼叫者許可權儲存過程與定義者許可權儲存過程是一樣的,角色都無效,都必須進行顯式授權。

但在執行階段,呼叫者許可權儲存過程的role是生效可見的。

點選(此處)摺疊或開啟

  1. CREATE USER userb IDENTIFIED BY userb;
  2. GRANT CONNECT, RESOURCE TO userb;

  3. conn userb/userb;
  4. CREATE TABLE userb_tab AS SELECT * FROM all_objects;

  5. conn luise/luise;

  6. --呼叫者許可權儲存過程(同樣沒有許可權)
  7. CREATE OR REPLACE PROCEDURE luise_proc1
  8. AUTHID CURRENT_USER
  9. AS
  10. BEGIN
  11.   DELETE FROM userb.userb_tab;
  12.   COMMIT;
  13. END;
  14. /

  15. Warning: Procedure created with compilation errors.

  16. --使用動態SQL,將許可權的檢查推遲到執行時,即可成功編譯
  17. CREATE OR REPLACE PROCEDURE luise_proc1
  18. AUTHID CURRENT_USER
  19. AS
  20. BEGIN
  21.   EXECUTE IMMEDIATE \'DELETE FROM userb.userb_tab\';
  22.   COMMIT;
  23. END;
  24. /

  25. --執行(正常)
  26. EXEC luise_proc1;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1070898/,如需轉載,請註明出處,否則將追究法律責任。

相關文章